美文网首页
javascript-数组去重复

javascript-数组去重复

作者: 阿木心 | 来源:发表于2018-10-17 14:26 被阅读3次

同数据类型元素去重复

var color = ['red','blue','green','pink','yellow','blue','black','red'];
function unique(arr){
        var newArr = new Array();
        for(var i in arr){
            if(newArr.indexOf(arr[i])==-1){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
unique(color) //打印值:['red','blue','green','pink','yellow','black'];

再来看下es6提供的数组去重方法是不是代码更为简洁呢?

set数据结构,成员的值都是唯一的。

var color = [1,1,2,2,3,3,4,4,5,5];
var array = Array.from(new Set(color));
console.log(array);//打印值:[1,2,3,4,5]

此时相同类型的元素被过滤掉了代码更为简洁了,那么存放不同类型的呢?接着看下面代码

var color = [1,"1",2,"2","red","red","blue","blue"];
var array = Array.from(new Set(color));
console.log(array);//打印值:[1, "1", 2, "2", "red", "blue"]

由此发现Set里面添加值的时候,不会自动类型转换,所以1和“1”是两种不同的值。Set内部判断两个值是否不同,使用的算法为“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,精确相等运算符认为NaN不等于自身。

var color = ["1",1,NaN,NaN,undefined,undefined];
var array = Array.from(new Set(color));
console.log(array);//打印值:["1",1, NaN, undefined]

以上也验证了在Set中NaN等于自身,那么我们继续往color数组添加对象类型试试呢。

var color = ['1','1',1,1,{"name":"lucy"},{"name":"lucy"},NaN,NaN,undefined,undefined];
var array = Array.from(new Set(color));
console.log(array);//打印值:["1", 1, {"name":"lucy"}, {"name":"lucy"}, NaN, undefined]

上面代码表示两个对象不相等,所以它们被识别为两个不同的对象。由此可见,Set不能对对象去重复。

相关文章

网友评论

      本文标题:javascript-数组去重复

      本文链接:https://www.haomeiwen.com/subject/cswkzftx.html