检查对象是否在javascript中有密钥

时间:2014-11-20 11:45:15

标签: javascript

我有两个对象数组,我想根据第二个对象的过滤来过滤第一个。这是一个例子:

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)。

你能给我任何可以帮助我的提示吗?

4 个答案:

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

DEMO

答案 1 :(得分:2)

这可能会对你有帮助。

  1. 循环遍历ary2,构建每个id值的数组(让我们称之为数组existingIds)。

  2. 在该循环之后,现在循环遍历ary1。对于ary1中的每个项目,请检查我们刚刚构建的id数组中是否存在existingIds值。如果是,请将当前项附加到result数组。

  3. 我可以为你编写代码,但如果你自己先尝试一下,这将是一个更好的学习经历:)

答案 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>