![](/img/trans.png)
[英]Array of objects to accumulate all object properties for which another property is the same
[英]quickest way to identify objects in array which have properties that are unique from properties in another object array
我有两个数据数组:
markerArray = [{
properties: {id: 1}
},
{
properties: {id: 2}
}];
和
data = [
{ id: 1},
{ id: 2},
{ id: 3}
]
我想尽快从data
中创建一个新的对象数组,这些data
的id在markerArray的properties.id
中不存在。
Lodash /下划线是一个选项。
不知道最快,但最简单的肯定是lodash:
_.difference(_.pluck(data, "id"),
_.pluck(_.pluck(markerArray, "properties"),"id"));
您可以使用map
映射ID,然后使用filter
查看data
数组:
var ids = markerArray.map(function(item) {
return item.properties.id;
});
var result = data.filter(function(item) {
return ids.indexOf(item.id) < 0;
});
建议您映射一个仅包含ID的第一个数组:
var idArray= markerArray.map(function(item){
return item.properties.id
});
//[1,2]
然后查找id数组中不存在的匹配项:
var result = data.filter(function(item){
return idArray.indexOf(item.id) === -1;
});
这是一个lodash解决方案:
_.reject(data, _.flow(
_.identity,
_.property('id'),
_.partial(_.includes, _.map(markerArray, 'properties.id'))
));
基本上,您想使用reject()从数据中删除不需要的项(通过创建副本,而不是通过修改原始项)。 我们使用flow()构建回调函数,以确定哪些项目被拒绝。 细目如下:
reject()
回调函数具有几个参数-我们只关心第一个参数。 这就是identity()所做的,它将第一个参数传递给flow()
的下一个函数。 id
属性。 同样,此id
是下一个flow()
函数的输入。 markerArray
的ID数组。 我们从中创建部分函数的函数包括include() 。 如果来自data
的ID位于此数组中,我们可以将其从结果中删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.