比较两个JavaScript对象数组并删除常用数组对象 var a=[ [ { id:“AAA” }, { id:“BBB” } ], [ { id:“AAA” }, { id:“DDD” } ] ]; 变量b=[ [ { id:“BBB” } ], [ { id:“CCC” }, { id:“BBB” } ], [ { id:“AAA” } ], [ { id:“AAA” }, { id:“DDD” } ], [ { id:“DDD” } ], [ { id:“CCC” }, { id:“DDD” } ], [ { id:“AAA” } ], [ { id:“AAA” }, { id:“BBB” } ] ]; 功能删除重复项(a、b){ 对于(变量i=0,len=a.length;i

比较两个JavaScript对象数组并删除常用数组对象 var a=[ [ { id:“AAA” }, { id:“BBB” } ], [ { id:“AAA” }, { id:“DDD” } ] ]; 变量b=[ [ { id:“BBB” } ], [ { id:“CCC” }, { id:“BBB” } ], [ { id:“AAA” } ], [ { id:“AAA” }, { id:“DDD” } ], [ { id:“DDD” } ], [ { id:“CCC” }, { id:“DDD” } ], [ { id:“AAA” } ], [ { id:“AAA” }, { id:“BBB” } ] ]; 功能删除重复项(a、b){ 对于(变量i=0,len=a.length;i,javascript,underscore.js,Javascript,Underscore.js,我已经尝试过过滤器和减少,但他们来与预期的结果 我找到了一个,但我的结构有点不同 从JavaScript或下划线中寻找可能的解决方案 预期结果:[[{“id”:“BBB”}]、{“id”:“CCC”}、{“id”:“BBB”}]、{“id”:“AAA”}][‌​{“id”:“DDD”}],{“id”‌​:“CCC”},{“id”:“DDD”}‌​]]首先,我们需要知道两个数组何时相等。我在isEqual函数中定义了这一点,如果一个数组的长度相同,并且对象的id顺序相同,则该数组等于另一个数组 接

我已经尝试过过滤器和减少,但他们来与预期的结果 我找到了一个,但我的结构有点不同

从JavaScript或下划线中寻找可能的解决方案


预期结果:
[[{“id”:“BBB”}]、{“id”:“CCC”}、{“id”:“BBB”}]、{“id”:“AAA”}][‌​{“id”:“DDD”}],{“id”‌​:“CCC”},{“id”:“DDD”}‌​]]

首先,我们需要知道两个数组何时相等。我在isEqual函数中定义了这一点,如果一个数组的长度相同,并且对象的id顺序相同,则该数组等于另一个数组

接下来,我们需要理解“删除重复项”的含义。假设您有两个数字数组[1,2,3,4]和[2,4,5,6]。我们预期结果为[1,3,5,6]。我们通过获取第一个数组并减去第二个数组中存在的任何项,然后获取第二个数组并减去第一个数组中存在的任何项来完成此操作。最后,我们将两个结果合并在一起。这就是remove_duplicates函数中发生的情况

var a = [
  [
    {
      id: "AAA"
    },
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "DDD"
    }
  ]
];
var b = [
  [
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "CCC"
    },
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "AAA"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "CCC"
    },
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "AAA"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "BBB"
    }
  ]
];

function remove_duplicates(a, b) {
    for (var i = 0, len = a.length; i < len; i++) {
        for (var j = 0, len = b.length; j < len; j++) {
            if (a[i].name == b[j].name) {
                b.splice(j, 1);
            }
        }
    }

    console.log(a);
    console.log(b);

}

console.log(a);
console.log(b);

remove_duplicates(a,b);

您应该发布您期望/想要返回的结果对象,以便更容易理解您到底在寻找什么。将期望结果添加到问题@aniedDo您是否在应用程序中使用了lodash?如果是,您可以使用方法差异,感谢您的快速响应,但在执行我看到一个AA被重复。给定代码的结果:
[[[{“id”:“BBB”}]、{“id”:“CCC”}、{“id”:“BBB”}]、{“id”:“DDD”}]、{“id”:“CCC”}、{“id”:“DDD”}、{“id”:“AAA”}]
,预期结果:
[[{“id”:“BBB”}]、{“id”:“CCC”}、{“id”:“BBB”}、{“id”]、{“id”:“DDD”}、{“id”:“DDD”}、{
我们是否可以避免在返回的对象的末尾添加重复项或删除重复项请解释
var bMinusA=减号(b,a)的用法;
当我检查返回的长度0ah是的,我忘记删除B中的重复项。解决方案已更新使用bMinusA将A中的项从B中的项中删除。虽然它们在您的问题中不存在,但如果您将不同的数组传递到“删除重复项”函数中,它们可能存在。请阅读下面的内容g维基页面:
var a = [
  [
    {
      id: "AAA"
    },
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "DDD"
    }
  ]
];
var b = [
  [
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "CCC"
    },
    {
      id: "BBB"
    }
  ],
  [
    {
      id: "AAA"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "CCC"
    },
    {
      id: "DDD"
    }
  ],
  [
    {
      id: "AAA"
    }
  ],
  [
    {
      id: "AAA"
    },
    {
      id: "BBB"
    }
  ]
];

function remove_duplicates(a, b) {
  var setOfB = setOf(b);
  var setOfA = setOf(a);

  var aMinusB = minus(setOfA, setOfB);
  var bMinusA = minus(setOfB, setOfA);
  return aMinusB.concat(bMinusA);
}

function setOf(array){
  return _.uniq(array, false, JSON.stringify);
}

function minus(a,b) {
  return _.reject(b, function(item){
    return _.find(a, _.partial(_.isEqual, item));
  });
}


// var expected = [
//   [{"id":"BBB"}],
//   [{"id":"CCC"},{"id":"BBB"}],
//   [{"id":"AAA"}],
//   [{"id":"DDD"}],
//   [{"id":"CCC"},{"id":"DDD"}]
// ];


console.log(remove_duplicates(a,b));