写在前面:
我们要想使用数组去重,那就必须对数组有一定的了解,关于JS数组的一些方法以及使用,可参考:
①JavaScript 内置对象之-Array
②ES5新增数组方法
③浅谈JavaScript中ES6新增的Set和Map结构以及Array.from方法
下面进入正题:利用JS的数组实现去重的目的
JS数组去重方法有很多,相信一些小伙伴也掌握了好多种方法,那接下来我就介绍一些比较常用的方法供大家参考。
indexOf方法返回给定元素在数组中第一次出现的位置,返回结果是匹配开始的位置。如果没有出现则返回-1
例:
var arr = [1,1,2,2,3,3,4,4];
var newArr = [];
for(var i=0,len=arr.length;i<len;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
console.log(newArr);
结果:
例:
function noRepeat(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
}
return res;
}
console.log(noRepeat([1, 1, 2, 2, 3, 3, 4, 4]));
结果:
例:
var arr = [1,1,2,2,3,3,4,4];
var newArr = arr.filter(function(value,index,self){
return self.indexOf(value) === index;
});
console.log(newArr);
结果:
主要利用Set结构不能接收重复数据的特点。
例:
var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr){
var newArr = [];
var myset = new Set(arr);
for(var val of myset){
newArr.push(val);
}
return newArr;
}
var arr2 = noRepeat(arr);
console.log(arr2);
结果:
ES6的出现,真真是极方便的~~~
例:
var arr = [1,1,2,2,3,3,4,4];
function norepeat(arr) {
let set = new Set(arr);
arr = [...set];
return arr;
}
console.log(norepeat(arr));
结果:
Array.from方法可以将 Set 结构转为数组。
例:
var arr = [1,2,2,2,3,3,4,4];
var newArr = Array.from(new Set(arr));
console.log(newArr);
结果:
splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。
例:
var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr){
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) {
arr.splice(j, 1);
}
}
}
return arr;
}
var arr2 = noRepeat(arr);
console.log(arr2);
结果:
includes()方法用于判断字符串是否包含指定的子字符串,如果找到匹配的字符则返回true,否则返回false。
例:
function noRepeat(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]));
结果:
例:
function noRepeat(arr) {
var newArr = [];
arr.forEach(item => {
return newArr.includes(item) ? '' : newArr.push(item)
});
return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]));
结果:
例:
var arr = [1,1,2,2,3,3,4,4];
var obj={
};
var newArr=[];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=true;
newArr.push(arr[i]);
}
}
console.log(newArr);
结果:
使用sort()方法先将原数组排序,然后与相邻的进行比较,如果不同则存入新数组。(原数组长度不变,但要注意:sort方法不是按照大小排序,而是按照字典顺序)
例:
var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr) {
var ret = [];
arr.sort();
var res = arr[0];
ret.push(arr[0]);
for (var i = 1; i < arr.length; i++) {
if (arr[i] != res) {
ret.push(arr[i]);
res = arr[i];
}
}
return ret;
}
var arr2 = noRepeat(arr);
console.log(arr2);
结果:
鄙人才疏学浅,如有纰漏,望各路巨佬不吝赐教~
上一篇
下一篇