Solution 1
会造成数组塌陷
// 最后一项不用再和后边的比了
for (let i = 0; i < arr.length - 1; i++) {
let item = arr[i];
for (let j = j + 1; j < arr.length; j++) {
if (item = arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
问题
splice很影响性能,如果后边有1000项,那这1000项都要向前提一位
Solution 1-2
对splice删除优化
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
for (let j = j + 1; j < arr.length; j++) {
if (item = arr[j]) {
arr[j] = arr[arr.length - 1];
arr.length--;
j--;
}
}
}
Solution 2
只有一个循环,性能很好
let arr = [1, 2, 3, 4];
let obj = {};
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (obj[item] !== undefined) {
arr[i] = arr[arr.length - 1];
arr.length--;
i--;
continue;
}
obj[item] = item;
}
问题
- 如果数组中出现对象,则出现问题,因为普通对象会被转化为字符串"[object Object]
- 如果数组中存在数字1与字符串‘1’,则也会出现问题
- 如果数组的值出现undefined也会出现问题
Solutiion 3
arr = Array.from(new Set(arr));