使用下划线比较两个未定义值的对象

Comparing two objects with undefined values using underscore.js

本文关键字:未定义 两个 对象 下划线 比较      更新时间:2023-09-26

使用下划线。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如果比较的一些值是未定义的。什么好主意吗?

这里有一个解决方案,它首先计算出哪些公共键具有已定义的值,然后使用_。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) );

注意:只有当你的对象包含基本类型(没有嵌套的对象或数组)