Javascript 查找数组';按属性指定其他数组中不存在的对象

Javascript 查找数组';按属性指定其他数组中不存在的对象,javascript,jquery,arrays,underscore.js,Javascript,Jquery,Arrays,Underscore.js,我正在寻找一种方法,根据对象的属性查找一个数组中不存在于另一个数组中的任何对象。使用jQuery或下划线执行此操作的最佳方法是什么 给出以下示例: "array1":[ {"testProperty":"A"}, {"testProperty":"B"}, {"testProperty":"C"} ] "array2":[ {"testProperty":"A", "User":"Smith"}, {"testProperty":"B", "Use

我正在寻找一种方法,根据对象的属性查找一个数组中不存在于另一个数组中的任何对象。使用jQuery或下划线执行此操作的最佳方法是什么

给出以下示例:

"array1":[
    {"testProperty":"A"}, 
    {"testProperty":"B"}, 
    {"testProperty":"C"}
]

"array2":[
    {"testProperty":"A", "User":"Smith"}, 
    {"testProperty":"B", "User":"Smith"}, 

]
我想从array1返回第三个对象,它的testProperty是“C”,因为它在array2中不存在


我在stackoverflow上找到了几个关于这个问题的例子,但是当需要使用这些对象的属性时,我就找不到了。

一个简单的Javascript方案,带有一个用于查找的哈希表

var data={“array1”:[{“testProperty”:“A”},{“testProperty”:“B”},{“testProperty”:“C”}],“array2”:[{“testProperty”:“A”,“User”:“Smith”},{“testProperty”:“B”,“User”:“Smith”},]},
结果=data.array1.filter(函数(a){
return!这个[a.testProperty];
},data.array2.reduce(函数(r,a){
r[a.testProperty]=真;
返回r;
},Object.create(null));

document.write(“”+JSON.stringify(结果,0,4)+“”)您可以将
过滤器
映射

var a={'array1':[{“testProperty”:“a”},{“testProperty”:“B”},{“testProperty”:“C”}],'array2':[{“testProperty”:“a”,“User”:“Smith”},{“testProperty”:“B”,“User”:“Smith”}];
var结果=a.array1.过滤器(函数(e){
返回a.array2.map(el=>{return el.testProperty});
});

控制台日志(结果)我不确定这是否算数,但如果您可以使用lodash而不是下划线,那么有一个很好的函数称为differenceBy:

var result = _.reject(array1, item => _.some(array2, {testProperty: item.testProperty}));

下面是一个使用过滤器和一些方法的纯es6 js版本:

array1=[
{“testProperty”:“A”},
{“testProperty”:“B”},
{“testProperty”:“C”}
];
阵列2=[
{“testProperty”:“A”,“User”:“Smith”},
{“testProperty”:“B”,“User”:“Smith”},
]
var r=array1.filter(x=>
!Object.key(x).some(z=>
array2.some(w=>
Object.key(w).some(y=>y==z&&w[y]==x[z])
)));

document.write(JSON.stringify(r))
您可以使用下划线并获得所需内容:

var hash = _.indexBy(array2, 'testProperty');
var result = _.reject(array1, item => _.has(hash, item.testProperty));
如果性能是一个问题,并且testProperty是array2中对象的唯一键,则可以使用创建哈希,并使用以下方法检查结果:


我更喜欢jQuery方法,但这非常有效,谢谢@Haymak3r jQuery方法?这到底是什么意思?所有这些答案都不需要jQuery。感谢分享Gruff,很高兴看到有几种不同的方法实现相同的功能。这是非常低效的。在
过滤器
的每次迭代中映射所有
阵列2
,这是完全不必要的。
var hash = _.indexBy(array2, 'testProperty');
var result = _.reject(array1, item => _.has(hash, item.testProperty));