数组去重方法总结
1.利用数组的indexof;
var arr = ['abc','abc','ss','2','d','ss','2','ss','f','22','d']; //定义一个新的数组 var s = []; //遍历数组 for(var i = 0;i<arr.length;i++){ if(s.indexOf(arr[i]) == -1){ //判断在s数组中是否存在,不存在则push到s数组中 s.push(arr[i]); } } console.log(s); //输出结果:["abc", "ss", "2", "d", "f", "22"]
关于indexOf()方法:
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
stringObject.indexOf(searchvalue,fromindex)
该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。
如果在数组中没找到字符串则返回 -1。
2.如果你了解es6,推荐你使用下面的方式
function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3]) // [1, 2, 3]
其中Set是一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。它本身就是一个构造函数,新建一个新的Set结构需要new关键字,接受参数为一个数组(或者具有 iterable 接口的其他数据结构);
Set 结构的实例有以下属性。
Set.prototype.constructor
:构造函数,默认就是Set
函数。Set.prototype.size
:返回Set
实例的成员总数。
Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。
add(value)
:添加某个值,返回 Set 结构本身。delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。has(value)
:返回一个布尔值,表示该值是否为Set
的成员。clear()
:清除所有成员,没有返回值。
其中,Array.from(Set)会将Set数据结构转换为数组;
3.过滤数组中对象某一属性相同的方法
前两种只能过滤到数组中时基本类型的重复数据;
delRepeat(array) { var hash = {}; array = array.reduce(function(item, next) { hash[next.id] ? '' : hash[next.id] = true && item.push(next); return item }, []); }
以上方法可以过滤掉数组中的对象某一属性相同的值,返回一个新数组;
看的故事多了,才慢慢知道,话说多了就是打自己的脸!