如何找到两个JavaScript对象数组之间的差异?

Val*_*lip 14 javascript arrays data-manipulation javascript-objects difference

我有两个JavaScript数组orig(原始对象数组)和update(更新的对象的orig数组),它们具有相同的长度并包含对象,我想输出每对对象之间的差异.

例:

var orig = [{enabled:"true", name:"Obj1", id:3},{enabled:"true", name:"Obj2", id:4}]; 

var update = [{enabled:"true", name:"Obj1", id:3}, {enabled:"true", name:"Obj2-updated", id:4}];
Run Code Online (Sandbox Code Playgroud)

输出应该是: name:"Obj2-updated"

我实现了一些东西,但它需要优化......

for(var prop=0; prop<orig.length; prop++) {
  for(prop=0; prop<update.length; prop++) {
    if(orig[prop].enabled != update.enabled) { console.log(update.enabled) }
    if(orig[prop].name != update[prop].name) { console.log(update[prop].name) }
    if(orig[prop].id != update[prop].id) { console.log(update[prop].id) }
  }
}
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 14

您可以过滤密钥并使用更新的密钥获取结果集.

var orig = [{ enabled: "true", name: "Obj1", id: 3 }, { enabled: "true", name: "Obj2", id: 4 }],
    update = [{ enabled: "true", name: "Obj1", id: 3 }, { enabled: "true", name: "Obj2-updated", id: 4 }],
    difference = [];

orig.forEach(function (a, i) {
    Object.keys(a).forEach(function (k) {
        if (a[k] !== update[i][k]) {
            difference.push({ id: update[i].id, key: k, value: update[i][k], index: i });
        }
    });
});

console.log(difference);
Run Code Online (Sandbox Code Playgroud)

  • 而且你看,这就是为什么[我之前问你,如果你确定你只需要改变的价值](http://stackoverflow.com/questions/39074429/how-to-find-differences-between-two -javascript阵列-的对象#comment65497981_39074429).到目前为止,问题已经改变,所需的返回值已经改变,从仅更改的值,到更改的值*和*该值的键,*现在*您已经决定要进行整个修改要退回的对象.请在五分钟之前*询问问题以正确撰写问题. (7认同)
  • @PavelValeriu:当然有可能.仔细看看Nina的解决方案正在做什么,在调试器中逐步跟踪它,您将能够找到如何做到这一点. (2认同)

Sir*_*rko 6

假设两者的属性名称相同且值只是基元(没有对象,数组等):

Object.keys( orig )
      .forEach( (key) => {
        if( orig[ key ] !== update[ key ] ) {
          console.log( update[key] );
        }
      });
Run Code Online (Sandbox Code Playgroud)