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 
    }) 
});