使用 underscore.js 查找对象的差异

0_0*_*0_0 1 javascript jquery underscore.js

所以我有两个 JSON 对象,我试图使用下划线 js 找出它们之间的区别。但是由于某种原因,它返回了整个对象而不是仅仅返回差异。我的目标是恢复模式,因为它是唯一不同的东西。

var a = {
        "name":"donor",
        "label":"Donor Data File (donor)",
        "pattern":"^donor(\\.[a-zA-Z0-9]+)?\\.txt(?:\\.gz|\\.bz2)?$"
};
var b = {
         "name":"donor",
         "label":"Donor Data File (donor)",
         "pattern":"^donor(\\.[a-zA-Z0-9]+)?\\.txt(?:\\.gz)?$"
};

console.log(_.difference(a,b));
Run Code Online (Sandbox Code Playgroud)

我不理解_.difference正确的用例吗?如果需要,这里有一个JSFiddle。

Thi*_* D. 5

/**
 * Deep diff between two object, using underscore
 * @param  {Object} object Object compared
 * @param  {Object} base   Object to compare with
 * @return {Object}        Return a new object who represent the diff
 */
const difference = (object, base) => {
  const changes = (object, base) => (
    _.pick(
      _.mapObject(object, (value, key) => (
        (!_.isEqual(value, base[key])) ?
          ((_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value) :
          null
      )),
      (value) => (value !== null)
    )
  );
  return changes(object, base);
}
Run Code Online (Sandbox Code Playgroud)