JS 数组去重(数组元素是对象的状况)

js数组去重有经典的 几种方法html

但当数组元素是对象时,就不能简单地比较了,须要以某种方式遍历各值再判断是否已出现。数组

由于:spa

1.若是是哈希判断法,对象做哈希表的下标,就会自动转换成字符型类型,从而致使全部元素都相等,这时判断方法再也不有意义。通常最后数组就只剩一个code

2.若是是直接比较法,则由于对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断再也不有意义。通常最后数组仍是原样htm

 

因此就须要进行值的比较对象

固然了,也能够换着法来将相应对象转为字符串(不是默认的那种[object Object])blog

 

举个例子:内存

var array = [
    {a:1,b:2,c:3,d:4},
    {a:11,b:22,c:333,d:44},
    {a:111,b:222,c:333,d:444},
    {a:11,b:22,c:33,d:44},
    {a:11,b:22,c:33,d:444}
    ];

假如须要按照属性a,b为数组进行去重字符串

那么最后将获得get

array = [
    {a:1,b:2,c:3,d:4},
    {a:11,b:22,c:333,d:44},
    {a:111,b:222,c:333,d:444}
    ];
//将对象元素转换成字符串以做比较
function obj2key(obj, keys){
    var n = keys.length,
        key = [];
    while(n--){
        key.push(obj[keys[n]]);
    }
    return key.join('|');
}
//去重操做
function uniqeByKeys(array,keys){
    var arr = [];
    var hash = {};
    for (var i = 0, j = array.length; i < j; i++) {
        var k = obj2key(array[i], keys);
        if (!(k in hash)) {
            hash[k] = true;
            arr .push(array[i]);
        }
    }
    return arr ;
}
//进行去重
var arr = uniqeByKeys(array,['a','b']);

这种方式暂时还能够,固然了若是出现那种属性和值组合正好有出现xx相同的那就xx了

相关文章
相关标签/搜索