Моя итерация работает отлично и денди, пока не узнает. Я столкнулся с пустым массивом, и метод.every() не работает с такими значениями.
Здесь валидация:
if(oJSonElementByIndex[sColumnName].every(x => typeof x == 'number'))
¿Любые другие варианты? Заранее спасибо.
Если в массиве нет элемента, каждый элемент массива заполняет это условие. Поэтому он возвращает true. Для достижения противоположного:
arr.length && arr.every(/*...*/)
arr.length
вместо более явного arr.length > 0
или более краткого arr
?
arr
не будет работать. И я не думаю, что > 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')
}