两种方法模拟 ES6 set 数组去重

第一种,利用字符串 indexOf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function MYSET(arr) {
let str = '';
let newArr = [];
if (arr.length) {
newArr.push(arr[0]);
str += JSON.stringify(arr[0]);
for (let i = 1; i < arr.length; i++) {
let temp = JSON.stringify(arr[i])
if (str.indexOf(temp) === -1) {
str += temp;
newArr.push(arr[i]);
}
}
}
return newArr;
}
let arr = [3, 1, 3, 1, 2, 2, { a: 1 }, { b: 1 }, { a: 1 }];
console.log(MYSET(arr));

第二种,利用对象 key 值不重复的特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function MYSET(arr) {
let obj = {};
let newArr = [];
if (arr.length) {
newArr.push(arr[0]);
obj[JSON.stringify(arr[0])] = arr[0];
for (let i = 1; i < arr.length; i++) {
let temp = JSON.stringify(arr[i]);
if (!obj[temp]) {
obj[temp] = arr[i];
newArr.push(arr[i]);
}
}
}
return newArr;
}
let arr = [3, 1, 3, 1, 2, 2, { a: 1 }, { b: 1 }, { a: 1 }];
console.log(MYSET(arr));

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!