我有两个数据数组:
public
和
markerArray = [{
properties: {id: 1}
},
{
properties: {id: 2}
}];
我希望尽快从data = [
{ id: 1},
{ id: 2},
{ id: 3}
]
创建一个新的对象数组,这些对象的id在markerArray中不存在data
Lodash /下划线是一种选择。
答案 0 :(得分:1)
不确定最快,但最简单的是使用lodash:
_.difference(_.pluck(data, "id"),
_.pluck(_.pluck(markerArray, "properties"),"id"));
答案 1 :(得分:0)
您可以使用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;
});
答案 2 :(得分: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;
});
答案 3 :(得分:0)
这是一个lodash解决方案:
_.reject(data, _.flow(
_.identity,
_.property('id'),
_.partial(_.includes, _.map(markerArray, 'properties.id'))
));
基本上,您希望使用reject()从数据中删除不需要的项目(通过创建副本,而不是通过修改原始文件)。我们使用flow()来构建回调函数,以确定哪些项被拒绝。这是细分:
reject()
的回调函数有几个参数 - 我们只关心第一个。这是identity()的作用,它将第一个参数传递给flow()
中的下一个函数。id
属性。同样,这个id
是为下一个flow()
函数输入的。markerArray
的ID数组。我们创建部分的函数是includes()。如果来自data
的ID在此数组中,我们可以将其从结果中删除。