在Javascript中比较Object Array和Array

时间:2017-07-31 22:31:52

标签: javascript arrays

我有一个包含条件的对象数组,我正在尝试搜索或比较对象数组与简单数组中的值:

var myObjArr = [ {this: "someval", that: "anotherval" }, {this: "someval", that: "anotherval" }, {this: "someval", that: "anotherval" } ];

然后我有一个结果数组...

var newArrResults = [ "anotherval", "someval", "anotherval2" ];

我需要检查myObjArr以查找结果数组newArrResults中的任何字符串值。我尝试了很多方法,大多数方法都不稳定。

我尝试了什么:

for(var b = 0; b<myObjArr.length; b++){
    if(newArrResults.indexOf(myObjArr[b].this) !== -1 && newArrResults.indexOf(myObjArr[b].that) !== -1 ) {
   // is unstable
   // i need to know if there are exact matches in "this & that"
}

我尝试的第一种方法是循环遍历ArrayObject并查找indexOf,但这似乎有点不稳定。有什么想法吗?救命?引导我走向正确方向的想法?

2 个答案:

答案 0 :(得分:0)

 let found =  myObjArr.filter((item)=>{
     return newArrResults.indexOf(item.this) > - 1 ||newArrResults.indexOf(item.that) > -1;
}).length > 0

'found'将是一个布尔值,告诉你它是否在数组中。

答案 1 :(得分:0)

代码中有两个问题 -
 1.您应该避免使用this之类语言的保留关键字  一个结束的大括号&#39;}&#39;您的for循环中缺少

以下代码适用于您想要的内容 -

var myObjArr = [ {foo: "someval", bar: "anotherval" }, {foo: "someval", bar: "anotherval" }, {foo: "someval", bar: "anotherval" }, {foo:"someVal",bar:"noVal"}];

var newArrResults = [ "anotherval", "someval", "anotherval2" ];

for(var b = 0; b<myObjArr.length; b++){
    if(newArrResults.indexOf(myObjArr[b].foo) !== -1 &&
       newArrResults.indexOf(myObjArr[b].bar) !== -1 ) {
    console.log("Exact match");
   //exact matches in "foo & bar"
   }
}

这里是Fiddle