您可以使用JavaScript“in”运算符来测试多个条件吗?

时间:2017-12-29 22:52:04

标签: javascript arrays object

我正在尝试测试一个或多个字符串是否等于对象键。例如:

if(("apple" || "oranges) in fruitObj) {
    console.log(fruitObj);
}

我的最终目标是循环遍历数组中的所有字符串,并测试是否有任何字符串在“fruitObj”中。

3 个答案:

答案 0 :(得分:4)

听起来你想要数组some函数。

if (["apple", "oranges"].some(str => str in fruitObj)) {
   console.log(fruitObj);
}

答案 1 :(得分:1)

另一种变体:您可以使用# remove empty list items and remove trailing/leading strings cleaned = [x.strip() for x in activity if x.strip() != ""] print(" ".join(cleaned)) # put a space between each list item (在ES7 / ES2016中引入):

Array.prototype.includes

这假设if (Object.keys(fruitObj).some(key => ["apple", "oranges"].includes(key)) { console.log(fruitObj); } 不包含任何继承的属性(因为fruitObj不会返回这些属性)。

写完之后,我意识到Dave的答案更简洁,更易读。

此处有旧版浏览器可用的填充:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill

答案 2 :(得分:0)

您问题的严格答案是:不,您不能使用in运算符来测试"合并"价值观,但当然你可以"结合"个别支票:



var mycar = { make: 'Honda', model: 'Accord', year: 1998 };
if ('make' in mycar || 'model' in mycar)
  console.log("found it");
else
  console.log("not there");




您可以为此创建一个简单的函数,并将其添加到Object



Object.prototype.contains = function(values) {
  if (values instanceof Array) {
    for (var i = 0; i < values.length; i++) {
      if (values[i] in this)
        return true;
    }
  } else if (values in this)
    return true;
  return false;
}

var mycar = { make: 'Honda', model: 'Accord', year: 1998 };
if (mycar.contains(['make', 'model']))
  console.log("found it");
else
  console.log("not there");
&#13;
&#13;
&#13;

请注意,尽管contains函数也添加到数组中,但您无法使用它来搜索字符串数组中的字符串。 in运算符仅与对象的键而不是其值进行比较。数组的键是它的索引,所以你只能myArray.contains[0, 5]来检查数组中是否存在其中一个索引。