我有两个对象数组,我想根据第二个对象的过滤来过滤第一个。这是一个例子:
var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}];
var ary2 = [{id:23},{id:54}, {id:65}];
所以在这种情况下,我想要返回的是一个数组,其中的对象具有第一个数组的id 23和54,以及所有可能的属性(在本例中为title)。
你能给我任何可以帮助我的提示吗?
答案 0 :(得分:3)
使用map
获取要搜索的索引列表:
var indexes = ary2.map(function (el) {
return el.id;
});
filter
基于索引列表的结果:
var result = ary1.filter(function (el) {
return indexes.indexOf(el.id) > -1;
});
答案 1 :(得分:2)
这可能会对你有帮助。
循环遍历ary2
,构建每个id
值的数组(让我们称之为数组existingIds
)。
在该循环之后,现在循环遍历ary1
。对于ary1
中的每个项目,请检查我们刚刚构建的id
数组中是否存在existingIds
值。如果是,请将当前项附加到result
数组。
我可以为你编写代码,但如果你自己先尝试一下,这将是一个更好的学习经历:)
答案 2 :(得分:1)
试试这个:
var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}];
var ary2 = [{id:23},{id:54}, {id:65}];
var newary=[];
for(x in ary1){
for(y in ary2){
if(ary1[x].id == ary2[y].id){
newary.push(ary1[x]);
}
}
}
console.log(newary);// here newary will be your return newary;
答案 3 :(得分:1)
也可以使用javascript中内置的一些函数式编程。
filteredResults = ary1.filter(function(ele){
return (ary2.map(function(idobj){return idobj.id;}).indexOf(ele.id)>-1)
})
filter(function)
将迭代遍历数组的每个元素,并通过回调函数传递它。在该回调中,如果返回true,则保留该值。如果为false,则过滤掉该值。
同样map(function)
将迭代遍历回调值的数组的每个元素。从map回调返回的所有值都将注入到结果中。因此,我们可以从ary2中的每个元素中获取id,并将其返回到map
函数中。
var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}];
var ary2 = [{id:23},{id:54}, {id:65}];
//Filter for the available ID's, store the resulting objects in a new array
filteredResults = ary1.filter(function(ele){
//map creates an array of just ID's
return (ary2.map(function(idobj){return idobj.id;}).indexOf(ele.id)>-1)
})
//now do whatever you were planning on doing with your results/
var res = document.getElementById("results");
filteredResults.forEach(function(ele){
res.innerHTML+="<li>{id:"+ele.id + ",title:" +ele.title+"}</li>"
})
console.log(filteredResults);
<ul id="results"></ul>