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了

相關文章
相關標籤/搜索