JS 数组去重

实现方法一: 使用for/forEach 遍历

1
2
3
4
5
6
7
8
9
10

function unique(arr) {
var newArr = [];
arr.forEach(function (item) {
if (newArr.indexOf(item) === -1) {
newArr.push(item)
}
})
return newArr
}

使用indexOf方法不识别NaN的情况。

实现方法二: 使用内置库的reduce方法

1
2
3
4
5
6
7
8
9

function unique(arr) {
return arr.reduce(function (prev, next) {
if (prev.includes(next) === false) {
prev.push(next)
}
return prev;
}, [])
}

使用includes方法适用NaN的情况。

实现方法三: filter 和 indexOf

适用于由基础类型值组成的数组。

1
2
3
4
5
6
7
8
9
10
11
function unique(arr) {
return arr.filter(function (elem, index, arr) {
return arr.indexOf(elem) == index;
})
}

function uniqueES6(arr) {
return arr.filter((elem, index, arr) => {
return arr.indexOf(elem) == index;
})
}

实现方法四: Set

Set对象或称为Set构造函数,是ES6提出的,它是一个值的集合,特性为里面的元素是唯一的。
适用于由基础类型值组成的数组。

1
2
3
4
5
6
7
function unique(arr) {
return [...new Set(arr)]
}

var uniqueES6 = (arr) => {
return [...new Set(arr)]
}