0
点赞
收藏
分享

微信扫一扫

数组去重 js实现

生态人 2022-04-14 阅读 121

利用对象的属性不能相同的特点进行去重

var arr = [1, 6, 4, 6, 6, 4, 2, "a", "a"];
var res = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
  if (!obj[arr[i]]) {
    obj[arr[i]] = true;
    res.push(arr[i]);
  }
}
console.log(res); //[1, 6, 4, 2, "a"]

双重循环 

使用额外数组

var arr = [1, 6, 4, 6, 6, 4, 2, "a", "a"];
var res = [];
for (var i = 0; i < arr.length; i++) {
  for (var j = 0; j < res.length; j++) {
    if (arr[i] == res[j]) {
      break;
    }
  }
  //如果这两个数相等说明循环完了,没有相等的元素
  if (j == res.length) {
    res.push(arr[i]);
  }
}
console.log(res); //[1, 6, 4, 2, "a"]

利用splice

双指针遍历,splice操作会改变原始数组,注意下标

for(i = 0;i<arr.length-1;i++){
    for(j = i+1;j<arr.length;){
        if(arr[i] == arr[j]){
            arr.splice(j,1)
         }else{
            j++;
         }
      }
}

利用sort

arr.sort((a,b)=>{
    return a-b;
 })
for(let i = 0;i <arr.length-1;i++){
    if(arr[i]==arr[i+1]){
        arr.splice(i+1,1)
        i--; //注意
    }
}

// 使用额外数组
var newArr = [];
arr = arr.sort();
for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== arr[i+1]) {
        newArr.push(arr[i])
    }
}
console.log(newArr);

利用 for/forEach/filter()和 indexOf()

for+indexOf

var res = [];
for (var i = 0; i < arr.length; i++) {
  if (res.indexOf(arr[i]) == -1) {
    res.push(arr[i]);
  }
}
console.log(res); 

forEach+indexOf


var res = [];
arr.forEach(function(item, index) {
  if (res.indexOf(item) == -1) {
    res.push(item);
  }
});
console.log(res); 

filter+indexOf


var res = arr.filter(function(item, index) {
  return arr.indexOf(item) == index;
});
console.log(res); 

ES6 的 new Set()实现去重

var arr = [1, 6, 4, 6, 6, 4, 2, "a", "a"];
//第一种
var newarr = Array.from(new Set(arr));
console.log(newarr); //[1, 6, 4, 2, "a"]
//第二种
var newarr1 = [...new Set(arr)];
console.log(newarr1); //[1, 6, 4, 2, "a"]

ES6 的 includes 实现去重

var arr = [1, 6, 4, 6, 6, 4, 2, "a", "a"];
var res = [];
arr.forEach(function(item, index) {
  if (!res.includes(item)) {
    res.push(item);
  }
});
console.log(res); //[1, 6, 4, 2, "a"]

利用map实现去重

let map = new Map()
let newArr = []
arr.forEach(ele => {
    if (!map.has(ele)) {
        map.set(ele, 1)
        newArr.push(ele)
    }
});

利用reduce实现去重

let res = (arr) =>{
    let newArr = []
    arr.reduce((pre, next)=>{
      if(!pre.get(next)){
        pre.set(next, 1)
        newArr.push(next)
      }
      return pre
    },new Map())
    return newArr.sort((a, b) => {
        return a - b
    })
}
console.log(res(arr))

利用递归

var arr = [3, 4, 5, 2, 3, 1, 1, 2];
        function unique(arr){
            var newArr = arr;
            
            //先排序
            newArr.sort((a,b) => {
                return a - b;
            });
            function loop(index){
                if (index >= 1) {
                    if (newArr[index] == newArr[index-1]) {
                        newArr.splice(index,1);//有相等的 则删除后一个
                    }
                    loop(index-1);//递归
                }
            }
            loop(newArr.length-1);
            return newArr
        }
        console.log(unique(arr));
举报

相关推荐

0 条评论