JS 數組去重(數組元素是對象的情況)


js數組去重有經典的 幾種方法

但當數組元素是對象時,就不能簡單地比較了,需要以某種方式遍歷各值再判斷是否已出現。

因為:

1.如果是哈希判斷法,對象作哈希表的下標,就會自動轉換成字符型類型,從而導致所有元素都相等,這時判斷方法不再有意義。一般最后數組就只剩一個

2.如果是直接比較法,則因為對象在內存中是按引用訪問的,屬性值相同的對象也不會相等,簡單的直接判斷不再有意義。一般最后數組還是原樣

 

所以就需要進行值的比較

當然了,也可以換着法來將相應對象轉為字符串(不是默認的那種[object Object])

 

舉個例子:

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為數組進行去重

那么最后將得到

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了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM