# 数组去重
# 数组去重
function array_unique (arr) {
let len = arr.length
if (!len) {
return [];
}
let tmp = [];
for (let i = 0; i < len; i++) {
// 判断数组arr的元素是否在数组tmp中
if (tmp.findIndex((v) => JSON.stringify(v) === JSON.stringify(arr[i])) === -1) {
tmp.push(arr[i]);
}
}
return tmp;
}
let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined', NaN, NaN, {}, {}, {a: 1}, {a: 1}];
let newArr = array_unique(arr);
console.log(newArr); // [1, 2, 3, '1', undefined, 'undefined', NaN, {}, {a: 1}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 获取数组 重复元素 出现的位置
/**
* 获取数组 重复元素 出现的位置
* @param {Array<string>} arr
*/
getArrRepeatIndex(arr) {
let rePoint = {}; // 记录重复项 第一次出现的位置(key) 及 其他重复的位置(value[])
arr.forEach((point, index) => {
if(point === true) return; // 跳过 已经判断过的元素
let resultArr = [];
let searchArr = arr.slice(index+1); // 截取 剩余的元素 做判断
searchArr.forEach((item, idx)=> {
if (point === item) {
resultArr.push(index+1+idx); // 记录 重复项 在 arr 的位置
arr[index+1+idx] = true; // 重复的元素 做标记
}
});
// 长度大于 0 ,记录重复元素
if (resultArr.length > 0) {
rePoint[index] = resultArr;
}
});
return rePoint;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
← deepAssign 懒加载 →