recorrer - Buscando un índice numérico en una matriz de javascript
matriz javascript (3)
Estoy recibiendo datos json que se agregan mediante índices numéricos.
Cuando estoy en mi forloop, por ejemplo, el índice puede comenzar en 1, lo que significa que en mi forloop se producirá un error porque 0 no existe.
¿Cómo verifico si existe un índice numérico en la matriz javascript?
Debes poder usar for(key in data)
var data = [];
data[1] = ''a'';
data[3] = ''b'';
for(var index in data) {
console.log(index+":"+data[index]);
}
//Output:
// 1-a
// 3-b
Que se repite en cada elemento clave en los datos si los índices no son contiguos.
Si lo que realmente estás describiendo es un Object
lugar de un Array
, pero es como el hecho de que tiene propiedades que son de uint32_t pero que no tienen una propiedad de length
esencial presente. Entonces podrías convertirlo en una matriz real como esta. Compatibilidad del navegador: esto requiere soporte de hasOwnProperty
Javascript
function toArray(arrayLike) {
var array = [],
i;
for (i in arrayLike) {
if (Object.prototype.hasOwnProperty.call(arrayLike, i) && i >= 0 && i <= 4294967295 && parseInt(i) === +i) {
array[i] = arrayLike[i];
}
}
return array;
}
var object = {
1: "a",
30: "b",
50: "c",
},
array = toArray(object);
console.log(array);
Salida
[1: "a", 30: "b", 50: "c"
] `
En jsfiddle
Ok, ahora tienes una matriz escasamente poblada y quieres usar un bucle for
para hacer algo.
Javascript
var array = [],
length,
i;
array[1] = "a";
array[30] = "b";
array[50] = "c";
length = array.length;
for (i = 0; i < length; i += 1) {
if (Object.prototype.hasOwnProperty.call(array, i)) {
console.log(i, array[i]);
}
}
Salida
1 "a"
30 "b"
50 "c"
En jsfiddle
Alternativamente, puede usar Array.prototyp.forEach si su navegador lo admite, o la plantilla disponible como se indica en la página de MDN que es5_shim , o es5_shim
Javascript
var array = [];
array[1] = "a";
array[30] = "b";
array[50] = "c";
array.forEach(function (element, index) {
console.log(index, element);
});
Salida
1 "a"
30 "b"
50 "c"
En jsfiddle
var a = [1, 2, 3], index = 2;
if ( a[index] !== void 0 ) { /* void 0 === undefined */
/* See concern about ``undefined'''' below. */
/* index doesn''t point to an undefined item. */
}