Я пытаюсь проверить, равна ли одна или несколько строк ключевому объекту. Например:
if(("apple" || "oranges) in fruitObj) {
console.log(fruitObj);
}
Моя конечная цель - перебрать все строки в массиве и проверить, находится ли какая-либо из строк внутри "fruitObj".
Это звучит, как вы хотите, чтобы массив some
функций.
if (["apple", "oranges"].some(str => str in fruitObj)) {
console.log(fruitObj);
}
Другой вариант: вы можете использовать Array.prototype.includes
(представленный в ES7/ES2016):
if (Object.keys(fruitObj).some(key => ["apple", "oranges"].includes(key)) {
console.log(fruitObj);
}
Это предполагает, что fruitObj
не содержит никаких унаследованных свойств (поскольку они не будут возвращены Object.keys()
).
После написания этого, я понял, что ответ Дэйва более краток и читабельен.
Для более старых браузеров имеется полиполк: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill
Строгий ответ на ваш вопрос: Нет, вы не можете использовать оператора 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");
Обратите внимание: хотя функция contains
также добавляется в массивы, вы не можете использовать ее для поиска строк в массиве строк. Оператор in
только сравнивается с ключами объекта, а не его значениями. Ключами массива являются его индексы, поэтому вы можете делать только myArray.contains[0, 5]
которые будут проверять, существует ли один из этих индексов в массиве.
fruitObj
не является массивом в этом вопросе. «Я пытаюсь проверить, равна ли одна или несколько строк ключу объекта ».'apple' || 'orange'
сам по себе является выражением. Он оценивает первое значение,'apple'
, так как это правда. Этот вид логики||
Выражение никогда не может использоваться для проверки нескольких значений в массиве или объекте.