likes
comments
collection
share

JavaScript4种常用的数组去重

作者站长头像
站长
· 阅读数 31

数组去重

面试中或者开发经常会问到数组去重,整理了我知道的四种。还有什么新方法,新操作,欢迎补充!

var arr = [1, 1, '1', '1', 'true', 'true', true, true, null, null, undefined, undefined, NaN, NaN, {'a': 1}, {'a': 1}]

1. ES6去重

{}不能去重

Array.from(new Set(arr))
// (9) [1, "1", "true", true, null, undefined, NaN, {…}, {…}]

2. 双重遍历去重

{}、NaN不能去重,可做特殊操作实现

function unique(arr = []) {
  for(let i = 0; i < arr.length; i++) {
    for(let j = i + 1; j < arr.length; j++) {
      if(arr[i] === arr[j]) {
        arr.splice(j, 1);
        j--;
      }
    }
  }
}
// (10) [1, "1", "true", true, null, undefined, NaN, NaN, {…}, {…}]

3. indexOf 或者 includes 去重

需要注意的是 includes 可以去除NaN,而 indexOf 不可以。

arr.indexOf(NaN) === -1

function unique(arr = []) {
  let newArr = [];
  for(let i = 0; i < arr.length; i++) {
    debugger;
    if(!newArr.includes(arr[i]) || newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
// (10) [1, "1", "true", true, null, undefined, NaN, NaN, {…}, {…}]

4. filter去重

原理:indexOf只会返回在数组中第一次出现的元素位置

arr.filter((item, index, arr) => {
  return arr.indexOf(item) === index;
})
(8) [1, "1", "true", true, null, undefined, {…}, {…}]
转载自:https://juejin.cn/post/6844904193631715335
评论
请登录