JavaScript数组去重方法合集

const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];

1. indexOf 对象属性

arr.forEach((key,index)=>{  //-循环原数据,并拿原数据中的每一项和临时数据进行比较
    if(newArr.indexOf(key) === -1){  //-如果临时数组中不存在则 push 到临时数组中
        newArr.push(key) 
  }        
})
console.log(newArr); //-Result【结果】: [1, '1', 17, true, false, 'true', 'a', {}, {}]

  1. new Map(数组)
for (let i = 0; i < arr.length; i++) {
    m.set(arr[i], arr[i]);
} 
console.log(m) //- Map(9) {1 => 1, '1' => '1', 17 => 17, true => true, false => false, …}  返回一个 Map 对象
const newArr = []
m.forEach(function (value, key) {
    newArr .push(value)
})
console.log(newArr );//[1, '1', 17, true, false, 'true', 'a', {}, {}]

  1. new Set(数组) ==>> Set结构不能接收重复数据的特点
console.log(newArr);// [1, '1', 17, true, false, 'true', 'a', {}, {}]
// Set是一系列无序、没有重复值的数据集合,传入一个需要去重的数组,Set会自动删除重复的元素   然后再将Set转数组返回。此方法效率高,代码清晰,缺点是存在兼容性问题
  1. filter + indexOf
    return self.indexOf(item) === index;
})
console.log(newArr);//  [1, '1', 17, true, false, 'true', 'a', {}, {}]
// filter把接收的函数依次作用于每一个数组项,然后根据返回值 true or false 决定是否保留该值
// 优点在于可在去重时插入对元素的操作,可拓展性强

  1. reduce + includes
  if (!newArr.includes(element)) {
    newArr.push(element);
  }
   return newArr;
}, []);
// reduce()把结果继续和序列的下一个元素做累加计算
// 利用 reduce 遍历和传入一个空数组作为去重后的新数组,然后内部判断新数组中是否存在当前遍历的元素,不存在就插入新数组
// 缺点在于时间消耗多,内存空间也额外占用

7.冒泡排序法

function noRepeat1(arr) {
    for (var i = 0; i < arr.length - 1; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
var arr2 = noRepeat1(arr);
console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]```
posted @ 2023-02-21 16:13  comeOnTryAgain  阅读(34)  评论(0)    收藏  举报