使用underscore.js比较具有未定义值的两个对象

时间:2016-08-26 06:15:30

标签: javascript jquery object underscore.js javascript-objects

使用underscore.js我试图将两个对象相互比较,如果它们相同,我想返回 true 。为此,我使用_.isEqual()。

var a = {0: "2", 1: "11", 2: "1"}
var b = {0: "2", 1: "11", 2: "1"}
_.isEqual(a, b) // returns true

按预期工作。我遇到的问题是我可能在给定时间没有来自其中一个对象的所有数据。让我们使用这个例子:

var a = {0: "2", 1: undefined, 2: undefined}
var b = {0: "2", 1: "11", 2: "1"}
_.isEqual(a, b) // returns false

如果某些比较的值未定义,我想要一种方法(显然不使用._isEqual)来返回 true 。任何想法?

1 个答案:

答案 0 :(得分:2)

这是一个解决方案,首先确定哪些公共密钥已定义值,然后使用_.isEqual进行比较:

var a = {0: "2", 1: undefined, 2: undefined}
var b = {0: "2", 1: "11", 2: "1"}

// helper predicate that returns true if the value passed to it is undefined
var notUndefined = _.negate(_.isUndefined);

// find the common keys that have defined values
var keys = _.intersection(_.keys(_.pick(a,notUndefined)), _.keys(_.pick(b,notUndefined)))

// compare only the common keys
var result = _.isEqual( _.pick(a, keys), _.pick(b, keys) );

NB仅当您的对象包含基本类型(没有嵌套对象或数组)时才会起作用