[英]Comparing two JavaScript Arrays of Objects and removing common Array Objects
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);
我尝试过过滤器并减小过滤器,但是它们达到了预期的效果,我发现了类似的过滤器,但结构却几乎没有什么不同
从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) {
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.