给数组去重的方法是有很多种的,面对这个问题,我一开始的想法是把数组元素push到另外一个空数组里面,然后循环判断。
具体方法如下:
var a = ['a','b','a','c'];
function c(arr){
var str = [];
for(i=0;i<arr.length;i++){
if(str.indexOf(arr[i])<0){
str.push(arr[i]);
}
}
return str;
}
a = c(a);
因为indexOf()这个方法返回了字符串在数组对象(字符串也可以看做数组对象)中第一次出现的位置,也就是下标。如果不存在就返回-1。当有重复的元素的时候str.indexOf()返回的值大于或等于0就不会被push到新的数组中了。
然而最近在网上学习的时候,学到了这样一个操作数组的方法 : filter() 我又了解了一个新的数组去重方法。
如下:
var b = ['abc','def','abc','ghi','def','jkl'];
b = b.filter(function(i,ind,s){
return s.indexOf(i)===ind;
});
console.log(b);
基本原理是,filter()方法筛选数组中元素,方法中接收的回调函数支持多个参数,第一个参数代表当前元素,第二个参数代表当前下标,第三个参数代表处理数组本身。接收的函数返回true 则保留当前元素,返回false则删掉当前元素。通过这种方法就规避了循环,实现了数组的去重。
网友评论