数组去重
数组去重这种问题很常见,常见的方法有很多种,作为初学者的我,也整理了以下四种,个人认为这四种容易理解,也实用
-
set方法
该方法是Es6新增语法,同时该方法的特点是元素不能重复
可以利用这一特点达到数组去重
例:letlet arr = [1, 2, 3, 3, 2, 4, 5, 1, 6, 5, 3, 7, 8, 8, 8];
let s = new Set(arr);
console.log(‘set:’, s);
-
双重for循环加splice截取
利用循环比较,加上splice截取掉相同的元素,也能达到去重效果
例: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(‘双重for:’, arr);
j–;的原因是,如果不减一的话,当有三个相同的元素是,会忽略一个,因为截取后,数组长度减一了吗,所以当截取一个字符时j需要减一
-
filter结合indexOf()
该方法也是Es6新增语法,利用索引过滤掉相痛的元素
例:let arr1 = [];
arr.filter((item, index) => {
if (arr.indexOf(item, 0) === index) {
arr1.push(item);
}
})
console.log(‘filter’, arr1);
该方法,意思是,得到元素和该元素对应的索引时,我们去这个数组里找,因为indexOf是找到第一次出现的索引,如果不相等说明,这两个元素值是相等的,也就是重复了,所以此时我们不会在执行push将它加入新数组里面 -
利用indexOf去重
我们利用indexOf查找元素索引的特点来实现,循环数组,在新数组里用indexOf的方法找数组里的值,如果没有,则indexOf的值为-1,那么我们就用push的方法将该元素添加到新数组里
let arr2 = [];
for (let i = 0; i < arr.length; i++) {
if (arr2.indexOf(arr[i]) == -1) {
arr2.push(arr[i]);
}
}
console.log(‘indexOf’, arr2);
当然数组去重的方法有很多,但是个人认为掌握理解这几种就够用了,其它方式也无非就是,利用比较,或者一些方法本身就不能重复的这一特点来达到去重的目的,对于小白的我,也只是分享下自己理解掌握的方法,忘各路大神勿喷哈,谢谢