数组去重方法总结

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
            }, []);
        }
复制代码

以上方法可以过滤掉数组中的对象某一属性相同的值,返回一个新数组;

posted @ 2017-11-15 17:55  ylnog  阅读(1036)  评论(0编辑  收藏  举报