Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript将一个对象的所有属性与其他对象进行比较_Javascript_Lodash - Fatal编程技术网

javascript将一个对象的所有属性与其他对象进行比较

javascript将一个对象的所有属性与其他对象进行比较,javascript,lodash,Javascript,Lodash,我有两个对象A var A = { a: 1, b: 2, c: 3, d: { 0: { e: 4, f: 5 }, 1: { g: 6 } } }; var B = { a: 1, b: 9, c: 3, d: { 0: { e: 4,

我有两个对象
A

var A = {
    a: 1,
    b: 2,
    c: 3,
    d: {
        0: {
            e: 4,
            f: 5
        },
        1: {
            g: 6
        }
    }
};

var B = {
    a: 1,
    b: 9,
    c: 3,
    d: {
        0: {
            e: 4,
            f: 8
        }
    }
};
我想将B中的所有属性与A中的相应属性(如果存在)进行比较。如果它们的值不匹配,则返回

所以我想回去

   b: 9,
    d:{
       0: {
          f: 8
       }
    }
是否有一个简单的解决方案,以洛达斯的方式


编辑:我尝试了A和B的Object.keys,做了一个交集,然后比较每个键值。当我有嵌套属性时,它会失败。

这里有一个基本函数,它使用lodash来检测简单嵌套对象和数组中的更改。它绝不是全面的,但它对简单的变更集很有效

function changes (a, b) {
  if (_.isEqual(a, b)) {
    return;
  } else {
    if (_.isArray(a) && _.isArray(b)) {
      return _.reduce(b, function(array, value, index) {
        value = changes(a[index], value);
        if (!_.isUndefined(value)) {
          array[index] = value;
        }
        return array;
      }, []);
    } else if (_.isObject(a) && _.isObject(b)) {
      return _.reduce(b, function(object, value, key) {
        value = changes(a[key], value);
        if (!_.isUndefined(value)) {
          object[key] = value;
        }
        return object;
      }, {});
    } else {
      return b;
    }
  }
}

下面是一个实际应用的例子:

请发布您已经使用的代码,以便其他人可以尝试提供帮助。