我正在尝试测试一个或多个字符串是否等于对象键。例如:
if(("apple" || "oranges) in fruitObj) {
console.log(fruitObj);
}
我的最终目标是循环遍历数组中的所有字符串,并测试是否有任何字符串在“fruitObj”中。
答案 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;
请注意,尽管contains
函数也添加到数组中,但您无法使用它来搜索字符串数组中的字符串。 in
运算符仅与对象的键而不是其值进行比较。数组的键是它的索引,所以你只能myArray.contains[0, 5]
来检查数组中是否存在其中一个索引。