个人博客

学习加油站


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

JavaScript 数组去重(一)

发表于 2019-10-04

JavaScript 数组去重(一)

前端面试或笔试经典题目之一——数组去重

一、ES6 + Set 去重法

  1. 可以去重 NaN

  2. 无法去重[], {}

1
2
3
4
5
function unique (arr) {
return Array.from(new Set(arr))
// or
// return [...new Set(arr)]
}

二、for循环 + indexOf+ splice 去重法

for循环倒序遍历,利用indexOf查找遍历值的索引,并用splice去重

  1. 由于NaN !== NaN ,因此当多个NaN 存在时,不会去重NaN
  2. 无法去重[], {}
1
2
3
4
5
6
7
8
9
10
function unique (arr) {
for (var i = arr.length -1;i > 0; i--){
// 循环遍历,从后面开始遍历不用管位置问题
if (arr.slice(0, i).indexOf(arr[i]) !== -1) {
// 元素与前面的所有元素比较,如果前面存在相同的则删掉自身
   arr.splice(i, 1)
  }
}
return arr
}

三、forEach + indexOf + 新数组 去重法

新建一个空数组,for 循环原数组,判断结果数组是否存在当前元素.

如果有相同的值则跳过,不相同则push进数组

  1. 由于NaN !== NaN ,因此当多个NaN 存在时,不会去重NaN
  2. 无法去重[], {}
1
2
3
4
5
6
7
8
9
function unique (arr) {
let a = []
arr.forEach(i=>{
if(a.indexOf(i) === -1)
a.push(i)
})

return a
}

四、fillter +indexOf 去重法

使用数组的filter方法和数组的indexOf方法

  1. 无法去重[], {}
  2. NaN 被删除了
1
2
3
4
5
function unique(arr) {     
return arr.filter(function(item, index, arr){
return arr.indexOf(item) === index;
})
}

五、filter + hasOwnProperty 去重法

使用数组的filter方法和对象的hasOwnProperty方法

1
2
3
4
5
6
function unique(arr) {
let obj = {};
return arr.filter(function(item, index, arr){
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
# JS # ES6 # Array
「ES6学习」解构赋值(二)
JS 判断对象是不是数组
  • 文章目录
  • 站点概览

WYP

知识管理,自我管理
12 日志
8 标签
GitHub E-Mail 简书
  1. 1. JavaScript 数组去重(一)
    1. 1.0.1. 一、ES6 + Set 去重法
    2. 1.0.2. 二、for循环 + indexOf+ splice 去重法
    3. 1.0.3. 三、forEach + indexOf + 新数组 去重法
    4. 1.0.4. 四、fillter +indexOf 去重法
    5. 1.0.5. 五、filter + hasOwnProperty 去重法
© 2019 – 2021 wyp