var array = [3,4,5]; delete array[1]; console.log(array); console.log(array[1]); array.some(element => { console.log(element); return element === 3 }) array.some(element => { console.log(element); return element === undefined }) PD: en la imagen a continuación, la array para el código anterior se toma como a y el element se toma como b
¿Por qué la función Array.some() no coincidió con undefined en el índice 1? ¿Se maneja indefinido de manera diferente?
El .some no verifica el índice vacío. El indefinido debe escribirse estáticamente.
const myArr = [1,,3]; console.log(myArr) myArr.some(elem => console.log(elem)) myArr[1] = undefined; console.log(myArr) myArr.some(elem => console.log(elem))Si desea detectar índices vacíos
Esto debería funcionar
const myArr = [1,,3]; function hadEmptyIndex(arr){ for(const member of arr){ if(typeof member === "undefined") return true } return false } console.log(hadEmptyIndex(myArr))Esto se debe a que no está iterando sobre valores empty , por lo que realmente no puede verificar si el valor es igual a undefined o no.
Una vez que elimine un elemento de una matriz, los métodos de la matriz, como some , forEach , etc., omitirán el elemento en la iteración.
Lo que puede hacer en su lugar es establecer el elemento en null , luego será iterable:
var a = [1, 2, 3]; a[0] = null // [ null, 2, 3 ] a.some(b => b === null) // trueGran pregunta, la función array.some() solo itera sobre índices con valores asignados,
callbackFn is invoked only for indexes of the array with assigned values. It is not invoked for indexes which have been deleted or which have never been assigned values.
para leer más Lea aquí