簡體   English   中英

Javascript使用lodash isEqual比較具有函數的對象

[英]Javascript compare objects having functions using lodash isEqual

如果它們具有函數,如何比較兩個對象是否相等? lodash的isEqual工作非常好,直到函數被拋出:

_.isEqual({
    a: 1,
    b: 2
}, {
    b: 2,    
    a: 1
});

// -> true

_.isEqual({
    a: 1,
    b: 2,
    c: function () {
        return 1;
    }
}, {
    a: 1,    
    b: 2,
    c: function () {
          return 1;
    }
});

// -> false

你確定要比較功能嗎? 如果您只關心比較每個不是函數的屬性,那么使用lodash很容易:

var o1 = { a: 1, b: 2, c: function() { return 1; } },
    o2 = { a: 1, b: 2, c: function() { return 1; } };

_.isEqual(o1, o2)
// → false

_.isEqual(_.omit(o1, _.functions(o1)), _.omit(o2, _.functions(o2)));
// → true

functions()函數返回一個函數屬性列表,並使用omit() ,你可以擺脫它們。

這是我試過的:

_.isEqual(o1, o2, function(val1, val2) {
  if(_.isFunction(val1) && _.isFunction(val2)) {
    return val1.toString() === val2.toString();
  }
})

Lodash支持customizer功能,允許您編寫自己的相等檢查。 這似乎是一個足夠好的測試,看看函數是否是逐字符的。

正如lodash文檔所述:

不支持函數和DOM節點。

https://lodash.com/docs#isEqual

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM