1. indexOf
有的话给数组下标,没有给-1
let arr1 = [2,4,6,2,4,6,1,2,3];
let newArr1 = [];
for (let i = 0; i < arr1.length; i++) {
//if (!newArr1.includes(arr1[i])) newArr1.push(arr1[i]);
if(newArr1.indexOf(arr1[i]) === -1) { // 证明newArr中没有此刻的arr[i]
newArr1.push(arr1[i]);
}
}
console.log(newArr1);
2. 利用对象key值唯一性
- 利用对象的特征,相同名字的属性会被覆盖(唯一性)如果对象中,没有出现数组项。证明现在这个项是没有重复的。
- ①把没有重复的项推进数组里②在对象上的属性添加一个标记。如果出现了,表明该项是重复项。
let arr2 = [2,4,6,2,4,6,1,2,3];
let newArr2 = [];
let obj2 = {};
for(let i = 0; i < arr2.length; i++) {
if(!obj2[arr2[i]]) { // 证明对象中没有arr[i]属性
newArr2.push(arr2[i]);
obj2[arr2[i]] = 1; // 添加标记这样对象中就有了一个arr[i]属性,方便下次判断
}
}
console.log(newArr2);
3. ES6 中的Set结构
// 去除数组的重复成员
let arr3 = [1, 2, 3, 6, 6, 9, 9, 12];
let res = [...new Set(arr3)];
console.log(res); // [1, 2, 3, 6, 9, 12]
4. ES6 的Set和Array.from
function dedupe(array) { // Array.from() 方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例。
// let newArr = Array.from(array);
// newArr[0] = 0;
// console.log(array); // [1, 1, 2, 3]
// console.log(newArr); // [0, 1, 2, 3]
return Array.from(new Set(array));
}
let arr4 = [1, 1, 2, 3];
dedupe(arr4); // [1, 2, 3]
ES6 -去除字符串里面的重复字符。
console.log([...new Set('ababbc')].join("")); // abc
统计数组中每一项出现的次数 利用对象
let arr = [2,4,6,2,4,6,1,2,3];
let obj = {};
for(let i = 0; i < arr.length; i++) {
if(!obj[arr[i]]) {
obj[arr[i]] = 1;
} else {
obj[arr[i]]++;
}
}
console.log(obj);
// 1: 1
// 2: 3
// 3: 1
// 4: 2
// 6: 2