那什么是数组去重呢?简单理解就是将数组中重复项去掉,演示demo如下:
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
去重之后的结果:
[ 1, 2, 3, 4, 5, 6, 7 ]
以上便是数组去重,那么如何运用javascript对数组去重呢?
首先看第一种方法,代码如下:
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function forarr(arr){
let newarr = [...arr]
for(var i=0;i<newarr.length;i++){
for(var j=i+1;j<newarr.length;j++){
if(newarr[i]===newarr[j]){
newarr.splice(j,1);
j--
}
}
}
return newarr;
}
console.log(forarr(arr))
这段代码使用了循环嵌套,首先循环遍历数组中每一项,然后用每一项和当前项后面的数组元素比对,相同的话,将其从数组中删除,依次循环完成,达到去重目的。
第二种方法如下:
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function filterarr(arr){
let newarr = [];
for(var i = 0;i<arr.length;i++){
if(newarr.indexOf(arr[i])===-1){
newarr.push(arr[i])
}
}
return newarr
}
var newarr = filterarr(arr);
console.log(newarr)
这个方法比较好理解,新建一个空数组,循环数组每一项,用空数组的indexOf方法检验每一项,如果不存在将其推入数组,循环完成后,返回新数组。
第三种方法如下:
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function fileterhash(arr){
var obj = {};
var newarr = [];
for(var i=0;i<arr.length;i++){
console.log(obj[arr[i]])
if(obj[arr[i]]==undefined){
obj[arr[i]]={};
obj[arr[i]].value = arr[i];
obj[arr[i]].count = 0;
newarr.push(arr[i])
}else{
obj[arr[i]].count =obj[arr[i]].count+1;
}
}
return newarr
}
var newarr = fileterhash(arr);
console.log(newarr)
这种方法和上一种类似,这种方法首先定义了一个空对象和一个空数组,然后循环数组,循环过程中,将数组的每一项作为对象的属性进行判断赋值。如果属性存在,说明数组元素重复直接跳过,属性不存在,说明数组元素为重复,将其推进空数组。依次循环,最后返回填充完成的新数组。这样做有什么好处呢?如果在去重的基础上需要计算出每个元素在数组中出现的次数,这种方法就很合适了。
第四种方法:
var arr = [1,2,3,4,5,5,5,5,1,1,2,2,3,4,5,6,7,5,3];
function filterreduce(arr){
return arr.reduce((pre,cur)=>{
if(pre.indexOf(cur)==-1){
return [...pre,cur]
}else{
return pre
}
},[]);
}
var newarr = filterreduce(arr);
console.log(newarr)
这种方法运用了javascript数组的叠加器reduce方法,开始的时候传递一个空数组,用这个空数组去和后面的每一项做判断,判断结果不重复的话,将后面的一项填充进数组,并返回,重复的话不做添加,直接返回。
reduce是javascript中一个非常好用的函数,希望大家可以掌握。
以上便是javascript中数组去重的几种常用方法,第二种最好理解,第三种扩展性最好。当然还有其他方法,大家可以留言,把你知道的方法分享给大家。