Проверьте, содержит ли строка какой-либо элемент массива в 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) });