数组去重的方式练习
程序员文章站
2024-03-22 19:47:40
...
数组去重
方法一
思路:使用indexOf判断新数组是否存在指定的值,不存在就添加,存在就跳过。返回新数组不改变原数组。
var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
function delArrRepeat1(arr){
var newArr = []; //定义一个空数组
for(var i = 0;i<arr.length;i++){
if(newArr.indexOf(arr[i]) == -1){ // 如果空数组内没有,就添加
newArr.push(arr[i]);
}
}
return newArr; //返回新数组
}
console.log(delArrRepeat1(arr2))
结果:[1, 5, 6, 3, 2, 4, 8, 9, 22, 55, 41, 23, 64]
会对应原来数组格式
方式二
思路:先给数组排序,用当前值和下一个值比较,如果不等就加入新数组,返回新数组不改变原数组。
var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
function delArrRepeat2(arr){
// 从小到大排序
arr.sort((a,b)=>{return a-b});
var newArr = [];
for(var i = 0;i<arr.length;i++){
if(arr[i] !== arr[i+1]){//比较当前和下一个是否相等
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(delArrRepeat2(arr2));
结果:[1, 2, 3, 4, 5, 6, 8, 9, 22, 23, 41, 55, 64]
结果会有排序
方式三
思路:数组每个元素和所有除自生以外的元素进行比较,如果有相同的就删除掉。会改变原数组。
var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
function delArrRepeat3(arr){
// 每一个元素和所有元素比较一次
for(var i = 0;i<arr.length;i++){// i表示当前是第几个和所有的比较
for(var j = 0;j<arr.length;j++){
if(j !== i && arr[i] === arr[j]){ //条件 不和当前比较,并且有全等的就删除掉
arr.splice(j,1);
}
}
}
return arr; // 返回原数组
}
console.log(delArrRepeat3(arr2));
结果:[1, 5, 6, 3, 2, 4, 8, 9, 22, 55, 41, 23, 64]
会对应原来数组格式
方式四
思路:通过计数,把元素当作下标放在一个新数组里面,通过 for in 来遍历,将新数组下标添加到一个数组里面返回新数组。
var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64];
function duplicateRemoval(arr){
var newArray = [],arrs = [];
//把元素当作下标记录,该元素在数组中出现的次数(主要是把元素当作下标)
for(var i = 0;i<arr.length;i++){
newArray[arr[i]] === undefined ? newArray[arr[i]] = 1 : newArray[arr[i]]++;
}
for(var i in newArray){arrs.push(i-0);}// 使用 for in 把下标加入到新数组 arrs 中。
return arrs;
}
console.log(duplicateRemoval(arr2));
结果:[1, 2, 3, 4, 5, 6, 8, 9, 22, 23, 41, 55, 64]
会有排序
处理混合数组
比如:var arr2 =[1,5,6,3,2,4,1,5,6,3,2,4,8,9,5,4,22,55,41,23,64,1,'ss','ss',true,true,1,1,{},{},NaN,NaN];
方式二、方式四:主要处理数字类型的数组,处理混合数组会有问题。
方式一、方式三:数字类型混合类型数组;
千万不要问后面的对象和NaN为什么去不掉!!!
上一篇: 视图查询慢 博客分类: oracle
下一篇: JAVA数组的相关操作