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

时间:2015-04-30 20:40:37

标签: 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,
            f: 8
        }
    }
};

我想将B中的所有属性与A中的相应属性进行比较(如果存在)。如果它们的值不匹配则返回。

所以我想返回

   b: 9,
    d:{
       0: {
          f: 8
       }
    }

在lodash方式中是否有一个简单的解决方案?

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

1 个答案:

答案 0 :(得分:1)

这是一个使用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;
    }
  }
}

以下是其中的一个示例:http://plnkr.co/edit/drMyGDAh2XP0925pBi8X?p=preview