作者/来源:新睿云小编 发布时间:2020-06-17
面试中或者开发经常会问到数组去重,小睿整理了4种方法。
var arr = [1, 1, '1', '1', 'true', 'true', true, true, null, null, undefined, undefined, NaN, NaN, {'a': 1}, {'a': 1}]
{}不能去重
Array.from(new Set(arr))
// (9) [1, "1", "true", true, null, undefined, NaN, {…}, {…}]
{}、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]) {
debugger;
arr.splice(j, 1);
j--;
}
}
}
}
// (10) [1, "1", "true", true, null, undefined, NaN, NaN, {…}, {…}]
需要注意的是 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, {…}, {…}]
原理:indexOf只会返回在数组中第一次出现的元素位置
arr.filter((item, index, arr) => {
return arr.indexOf(item) === index;
})
(8) [1, "1", "true", true, null, undefined, {…}, {…}]