Javascript 如何从一个数组中减去另一个数组?
我有两个阵列:Javascript 如何从一个数组中减去另一个数组?,javascript,underscore.js,Javascript,Underscore.js,我有两个阵列: var collectionA = [ {'name': 'Brandon', 'age': '41'} ]; var collectionB = [ {'name': 'Brandon', 'age': '41'}, {'name': 'Tom', 'age': '25'}, {'name': 'Jimmy', 'age': '36'}, {'name': 'Brian', 'age': '36'} ]; 如何创建第三个数组,它基本上是
var collectionA = [
{'name': 'Brandon', 'age': '41'}
];
var collectionB = [
{'name': 'Brandon', 'age': '41'},
{'name': 'Tom', 'age': '25'},
{'name': 'Jimmy', 'age': '36'},
{'name': 'Brian', 'age': '36'}
];
如何创建第三个数组,它基本上是从collectionB中减去collectionA的结果?仅供参考:我在这个项目中使用下划线和主干线,我很乐意使用其中一个
第三个数组如下所示:
var collectionC = [
{'name': 'Tom', 'age': '25'},
{'name': 'Jimmy', 'age': '36'},
{'name': 'Brian', 'age': '36'}
];
您可以在第二个集合中使用0.filter和0.some:
_.filter(collectionB, function(x) {
return !_.some(collectionA, function(y) {
return y.name == x.name
})
});
或等效地使用u.拒绝:
不过,这可能不是最有效的方法——如果你有大型集合,你可能需要一些更优化的东西,比如说,先做一个哈希映射,以加速内部查找
var collectionA=[
{'name':'Brandon','age':'41'},
{'name':'Tom','age':'25'},
{'name':'Jimmy','age':'36'},
{'name':'Brian','age':'36'}
];
变量集合B=[
{'name':'Brandon','age':'41'}
];
var减法=函数,b{
var r={};
福瓦尔一世{
var ai=a[i];
b中的j穹窿{
var bj=b[j];
ifai.name!=bj.name | | ai.age!=bj.age{
r[i]=ai;
}
}
}
返回r;
};
var c=减去CollectionA,collectionB;
注意:这里根本没有JSON,您拥有的是带有Javascript对象的Javascript数组。JSON是一种表示对象的文本格式,没有JSON数组。json字符串可以将数组编码到其中。但是,使用json字符串的方式并不是您想要的。你把它们解码成一个本机结构,例如javascript数组,然后对这些本机结构做任何你想做的事情。第一步是写一个函数,或者在你的框架中找到一个函数来进行某种基于属性的对象比较。具有匹配属性的两个对象仍然是两个对象,因此必须有一个比较器。一旦你有了这些,那么它基本上与简单字符串或数字列表而不是对象的类似问题相同。
_.reject(collectionB, function(x) {
return _.some(collectionA, function(y) {
return y.name == x.name
})
});