web-dev-qa-db-fra.com

Recherche d'un index numérique dans un tableau javascript

Je reçois des données JSON qui sont agrégées par des index numériques.

Lorsque je suis dans mon forloop, par exemple, l'index peut commencer à 1, ce qui signifie qu'une erreur se produira dans mon forloop car 0 n'existe pas.

Comment vérifier si un index numérique existe dans le tableau javascript?

22
jkushner
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.     */
}
35
andlrc

Vous devriez pouvoir utiliser 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

Qui passera en boucle sur chaque élément clé des données si les index ne sont pas contigus.

6
JasonM

Si ce que vous décrivez réellement est un Object plutôt qu'un Array , mais est un tableau comme dans le fait qu'il a des propriétés qui sont de uint32_t mais n'a pas essentiel length propriété présente. Ensuite, vous pouvez le convertir en un véritable tableau comme celui-ci. Compatibilité navigateur Si cela nécessite la prise en charge 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);

Sortie

[1: "a", 30: "b", 50: "c"] ` 

Sur jsfiddle

Ok, maintenant vous avez un tableau peu peuplé et vous voulez utiliser une boucle for pour faire quelque chose.

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]);
    }
}

Ouput

1 "a"
30 "b"
50 "c"

Sur jsfiddle

Vous pouvez également utiliser Array.prototype.forEach si votre navigateur le prend en charge, ou la cale disponible, comme indiqué sur la page MDN que j'ai liée, ou es5_shim

Javascript

var array = [];

array[1] = "a";
array[30] = "b";
array[50] = "c";

array.forEach(function (element, index) {
    console.log(index, element);
});

Sortie

1 "a"
30 "b"
50 "c"

Sur jsfiddle

0
Xotic750