ИЛИ в включает в JS - PullRequest
       6

ИЛИ в включает в JS

0 голосов
/ 04 августа 2020

У меня проблема, мне нужно вернуть boolean, когда мой массив включает хотя бы один из объектов, поэтому в моем операторе if я использую оператор ||, но id не работает

мой код:

первый случай:

//my array
const array = ['one'];

if(array.includes('one' || 'two' || 'three') {
    return true;
}

//return true

второй случай:

const array = ['two'];

if(array.includes('one' || 'two' || 'three') {
    return true;
}

//return false

может кто-нибудь сказать мне, почему во втором случае мой if оператор вернуть мне false, когда я предоставлю один из правильных предметов?

спасибо за любую помощь

Ответы [ 5 ]

1 голос
/ 04 августа 2020

То, что вы хотите, - это проверить пересечение массивов : пока присутствует один или несколько элементов в обоих массивах, вы хотите вернуть true.

Это можно сделать с использованием Array.prototype.some с внутренним предикатом с использованием Array.prototype.includes:

const array = ['two'];
const badArray = ['foobar'];
const acceptedValues = ['one', 'two', 'three'];

function isIntersecting(a1, a2) {
  return a1.some(x => a2.includes(x));
}

console.log(isIntersecting(array, acceptedValues)); // true
console.log(isIntersecting(badArray, acceptedValues)); // false
1 голос
/ 04 августа 2020

a || b означает: «Если a истинное значение, a, иначе b».

'one' истинное значение, поэтому 'one' || 'two' || 'three' означает 'one'

Таким образом, array.includes('one' || 'two' || 'three') означает array.includes('one')

Используйте find и проверьте все возможные значения, если вам нужно проверить соответствие для одного из нескольких значений.

const array = ['two'];

const searching_for = ['one', 'two', 'three'];

const first_match = array.find(entry => searching_for.includes(entry));

console.log(first_match);
0 голосов
/ 04 августа 2020

В этом случае вы можете просто использовать:

const array = ['1','two','smth']
const test (array) => {
  return array.includes('one') || array.includes('two') || array.includes('three')
}
console.log(test(array))

Logical или (||) вернет true, если хотя бы один оператор true.

0 голосов
/ 04 августа 2020
  1. array.includes может получить только один элемент
  2. 'one' || 'two' || 'three' считается IF 'one' is false/empty/undefined THEN 'two' не так, как вы думаете.

Вот код пример, как можно достичь желаемого:

var toCheck = "one";
var valid = ['one','two', 'three'];

function contains(target, pattern){
    var value = 0;
    pattern.forEach(function(word){
      value = value + target.includes(word);
    });
    return (value === 1)
}

console.log(contains(toCheck, valid));
0 голосов
/ 04 августа 2020

Проблема в том, что оператор OR не предназначался для такого использования. Он возвращает свой первый операнд, если он правдив, в противном случае он возвращает свой второй операнд.

Итак, 'one' || 'two' || 'three' оценивается как 'one', так как он правдивый; поэтому в includes для проверки передается только 'one':

console.log('one' || 'two' || 'three')

Вместо этого вы можете использовать метод массива Array#some для достижения желаемого:

//my array
const array = ['two'];

//list of values to check for
const options = ['one', 'two', 'three'];

console.log(array.some(elem => options.includes(elem))) //true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...