#javascript #arrays
#javascript #массивы
Вопрос:
Я проверяю, есть ли какое-либо «» значение в массиве элементов, подобном этому
"" in line.map(function(){return $(this).val();}).get()
и он возвращает false, но когда я отлаживаю его в браузере, я получаю это в массиве
line.map(function(){return $(this).val();}).get() = ["1", "2", "4", "", "", "", "", "", "3"]
я полагаю, что это должно возвращать true, верно?
я уже пробовал с .each
, но я не могу вернуть его, если я не использую глобальную переменную с return false;
Ответ №1:
in
Оператор не проверяет, содержит ли массив значение (которое было бы indexOf
или includes
), он перечисляет свойства объекта. Например:
const data = ['a', 'b', 'c', 'd', 'e', 'f'];
for (f in data) {
console.log('gets the index:', f);
console.log('gets the value:', data[f]); // <- note the access using f
}
Скорее, вы должны использовать, find
если вам нужен элемент или some
если вам просто нужно проверить наличие:
const data = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log('find an element by value:', data.find(it => it === 'c'));
console.log('check if any elements match:', data.some(it => it === 'c'));
Комментарии:
1. отличная идея, кстати, что означает it => это ?
2. @JoelRodrigues это сокращение для функции lambda (или жирной стрелки). Это анонимные функции, которые обычно представляют собой одно выражение, идеально подходящее для предикатов в
find
и друзьях.
Ответ №2:
Вы должны использовать фильтр и проверять длину
var hasEmpty = line.filter(function(){ return $(this).val().trim() === ""}).length > 0;
или немного больше ES2015, используя Array.some
для коллекции jQuery
var hasEmpty = line.toArray().some((el) => $(el).val() === "");
Комментарии:
1. Если производительность имеет значение ( если ), я бы не решился использовать
filter
в качестве замены дляsome
, поскольку он не может прерваться раньше, чемfor
цикл. Это также касается очень больших массивов. Это будет работать и обычно работает хорошо, но они не полностью эквивалентны.2. @ssube — нет, они не совпадают, но для набора элементов это не должно иметь значения, если, конечно, в OP нет миллионов элементов?