实现JS数组去重的代码有以下几种方法 :
1.利用双重for循环方法,也是最原始的方法。
const arr = [1,2,2,3,3,3,4];
for (var i = 0; i < arr.length; i++) {
for (var j = i+1; j < arr.length; j++) {
if (arr[i]===arr[j]) {
arr.splice(j,1);
j--; // 防止只删除其中一个重复元素,而遗漏后面的重复元素
}
}
}
console.log(arr); // [1,2,3,4]
2.使用for循环,利用indexOf方法判断数组的相同元素索引是否相等,如果不相等,就删除此数据
const arr = [1,2,3,3,4,4,4,5];
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i])!==i) {
arr.splice(i,1);
i--;
}
}
console.log(arr); // [1,2,3,4,5]
3.使用for循环,利用indexOf方法判断数组的相同元素索引是否相等,如果相等,添加到新数组里面
const arr = [1,2,2,3,3,3,4];
const newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) === i){
newArr.push(arr[i])
}
}
console.log(newArr); // [1,2,3,4]
4.使用filter方法筛选数组,其实和2,3差不多
const arr = [1,2,2,3,3,3,4];
const newArr = arr.filter((item,index,arrs) => arrs.indexOf(item)===index);
console.log(newArr); // [1,2,3,4]
5.利用forEach + includes 方法遍历数组
const arr = [1,2,2,3,3,3,4];
const newArr = []; //创建新数组将不重复的部分push进去
arr.forEach(item => {
// 利用includes方法判断数据是否已经存在与原数组中
if (!newArr.includes(item)) {
newArr.push(item);
}
});
console.log(newArr); // [1,2,3,4]
6.利用indexOf方法判断数组中是否存在某个元素,如果不存在返回-1,则向新数组中添加该元素(类似于方法5,只不过一个是includes判断数据是否存在,另外一个是indexOf判断)。
const arr = [1,2,2,3,3,3,4];
const newArr = [];
for (var i = 0; i<arr.length; i++) {
if (newArr.indexOf(arr[i])===-1) {
newArr.push(arr[i])
}
}
console.log(newArr); // [1,2,3,4]
7.利用es6中的Set数据结构,利用Set数据结构中数据唯一的特性。
const arr = [1,2,2,3,3,3,4];
const newArr = [...new Set(arr)];
// 或 使用Array.from()方法,都是将类数组转化为数组形式
// const newArr = Array.from(new Set(arr));
console.log(newArr); // [1,2,3,4]
8.同样使用es6 中的Set数据结构:将数组转换为Set对象,Set对象会自动去除重复元素,之后再将Set对象转换为数组。
const arr = [1,2,2,3,3,3,4,5];
var newArray = Array.from(new Set(arr));
//或者 var newArray = [...new Set(arr)]; 都是将类数组转化为数组
console.log(newArray); // [1, 2, 3, 4, 5]
9.使用es6 中的Map数据结构结合filter方法:
const arr = [1,2,2,3,3,3,4];
var o = new Map();
const newArr = arr.filter(item => !o.has(item) && o.set(item,1)); // 这里的1可以是任意值,主要还是前面 o.has()方法进行是否有值的判断,filter方法返回一个符合条件的新数组;
console.log(newArr); // [1,2,3,4]