Проверьте, содержит ли строка какой-либо элемент массива в JavaScript

Как проверить, содержит ли строка какой-либо элемент массива? Я хочу фильтровать некоторый массив, если элемент имеет некоторую строку. См. Ниже код.

var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];

function checker(value) {
  var prohibited = ['banana', 'apple'];

  for (var i = 0; i < prohibited.length; i++) {
    if (value.indexOf(prohibited[i]) == -1) {
      return true;
    } else {
      return false;
    }
  }
}

arr = arr.filter(checker);
console.log(arr);

Ответы

Ответ 1

Проблема заключается в цикле for, который повторяется только один раз, так как возврат завершает функцию, отсекая цикл for в процессе. Таким образом, вы можете обновить код так, чтобы функция возвращалась только после завершения цикла for.

var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];

function checker(value) {
  var prohibited = ['banana', 'apple'];

  for (var i = 0; i < prohibited.length; i++) {
    if (value.indexOf(prohibited[i]) > -1) {
      return false;
    }
  }
  return true;
}

arr = arr.filter(checker);
console.log(arr);

Ответ 2

Это может быть так просто:

const arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];

const checker = value =>
  !['banana', 'apple'].some(element => value.includes(element));

console.log(arr.filter(checker));

Ответ 3

Я думаю, что это может быть значительно упрощено. Внутри javascript уже встроен встроенный javascript для проверки этих вещей. Рассмотрим:

var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];

function checker(value) {
  var prohibited = ['banana', 'apple'];

  // indexOf() returns -1 if the element doesn't exist in the prohibited array
  return prohibited.indexOf( value ) == -1;
}

arr = arr.filter(checker);
console.log(arr);

Ответ 4

<script>
$(document).ready(function(){
    var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];

    var prohibited = ['banana', 'apple'];

 $.each(arr,function(arr_index,arr_value)
 {
   $.each(prohibited,function(p_index,p_value)
   {
      if(arr_value ==  p_value)
      {
          alert(arr_value+" = "+p_value);
      }
      else
      {
          alert(arr_value+" != "+p_value);
      }
   });
});

});
</script>

Ответ 5

Например, путем создания RegExp и тестирования на это:

var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
var prohibited = ['banana', 'apple'];

var escapeForRegex = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};

var r = new RegExp(prohibited.map(escapeForRegex).join("|"));
arr.filter(function(v){ return !r.test(v) });