Есть ли такой метод, как .every () для массивов с пустыми значениями?

1

Моя итерация работает отлично и денди, пока не узнает. Я столкнулся с пустым массивом, и метод.every() не работает с такими значениями.

Здесь валидация:

if(oJSonElementByIndex[sColumnName].every(x => typeof x == 'number'))

¿Любые другие варианты? Заранее спасибо.

  • 3
    Что вы имеете в виду, что это не работает? Что именно вы хотите достичь?
  • 0
    Я думаю, что одна строка кода довольно понятна с точки зрения того, чего он хочет достичь ...
Показать ещё 4 комментария
Теги:
foreach
iteration

2 ответа

2
Лучший ответ

Если в массиве нет элемента, каждый элемент массива заполняет это условие. Поэтому он возвращает true. Для достижения противоположного:

arr.length && arr.every(/*...*/)
  • 0
    Есть ли причина использовать arr.length вместо более явного arr.length > 0 или более краткого arr ?
  • 1
    @aaron arr не будет работать. И я не думаю, что > 0 делает его более читабельным.
Показать ещё 3 комментария
0

Таким образом, комментарий о "каждом" предикате выполняется в пустом массиве, а комментарий об использовании array.length а не только массив, привел меня к тому, чтобы array.length этот фрагмент, чтобы проиллюстрировать.

Здесь следует отметить правдивость пустого массива, ложность пустой длины массива - ноль и несколько неинтуитивную логическую идею о том, что если у вас нет предикатов, то ни один из них не прошел условие:

const empty = []
const typeofNumber = (x) => ( typeof x === 'number' )

console.log('an empty array will return ${empty.every(typeofNumber)} on an every, since "every" predicate fulfilled the condition')

if(empty.length && empty.every(typeofNumber)) {
  console.log('empty array length and every are truthy')
} else {
  console.log('empty array length and every are falsey')
}

if(empty && empty.every(typeofNumber)) {
  console.log('empty array and every are truthy')
} else {
  console.log('empty array and every are falsey')
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню