2017-09-28 3 views
1

Le tableau récupéré a une clé et une valeur pour chaque élément, mais je veux obtenir un index simple pour chaque valeur à savoir 0, 1, 2, 3, 4 etc qui n'est pas actuellement la clé donne (et je ne le veux pas non plus). L'utilisation de index ne semble pas non plus fonctionner.jQuery .each obtenir l'index des éléments

$.getJSON("filepath/current.json", function(data) { 
    var items = []; 
    $.each(data, function(key,val) { 
    items.push("<p id='" + key + "'>" + val + "</p>"); 
    }); 
}); 
+1

Pouvez-vous donner un échantillon du fichier que vous analysez? –

+0

Qu'est-ce que 'key' vous donne actuellement? La touche – Andy

+0

donne un nombre qui augmente progressivement en valeur comme 66, 69, 87 etc et la valeur est du texte. C'est ce qui est dans le fichier json. – Hasen

Répondre

1

Pour objects jQuery each ne prend pas en charge un paramètre index. Mais vous pouvez créer un index pour le vôtre sans aucun problème. ;)

var data = { 
 
    one: "ONE", 
 
    two: "TWO", 
 
    three: "THREE" 
 
    }, 
 
    items = []; 
 

 
//Use a simple counter ;) 
 

 
(function() { 
 
    var i = 0; 
 
    $.each(data, function(key, val) { 
 
    items.push("<p id='" + i + "'>" + val + "</p>"); 
 
    i++; 
 
    }); 
 
})(); 
 

 
console.log(items);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Oui, cela semble être le seul moyen alors. – Hasen

0

Essayez ceci:

var data = ["aa", "bb", "cc"]; 
 
var items = data.map((val, index) => "<p id='" + index + "'>" + val + "</p>"); 
 
console.log(items);

Et encore plus propre avec le modèle ECMAScrpt6 litéral:

var data = ["aa", "bb", "cc"]; 
 
var items = data.map((val, index) => `<p id='${index}'>${val}</p>`); 
 
console.log(items);

0
$.getJSON("filepath/current.json", function(data) { 
    var items = []; 
    for(key in data) { 
     var insert_key=parseInt(key)||0; 
     items.push("<p id='" + insert_key + "'>" + data[key] + "</p>"); 
    }   
}); 
0

La propriété key est littéralement l'index. Si le key n'est pas un index numérique, vos données ne sont pas un tableau mais un objet.

Vos choix sont:

a) repenser et refondre la solution. Qu'est-ce que vous allez utiliser 0, 1, 2 etc pour? Peut-il être remplacé? B) introduire une variable à l'extérieur de la portée each et l'incrémenter manuellement à l'intérieur de la portée. Si vous devez accéder au val ultérieurement en utilisant l'index numérique, vous devez mapper cet objet data à un tableau d'objets contenant uniquement les propriétés key et val.

+0

N'existe-t-il pas un index numérique basé sur le nombre d'éléments, quelle que soit la valeur de la clé? Sûrement, même si la clé est "bonjour" et la valeur est "au revoir", il devrait tout de même être connu que l'index de cet élément est 0 puisqu'il est le premier dans la liste? J'ai supposé que la valeur serait toujours accessible. – Hasen

+0

Pour les tableaux, oui. Tous les tableaux en javascript ont des index numériques. Cependant, aucun objet ne le fait. Toute clé d'index non numérique ajoute une propriété à un objet, par ex. 'var a = []; a ['prop'] = 1; 'ajoute une propriété avec la valeur 1, équivalant à' a.prop = 1'. Techniquement, un tableau est un objet, donc c'est correct, cependant 'length' de ce tableau' a' est toujours 0. Reverse ne fonctionnera pas - 'var b = {}; b [0] = 'test']; ',' longueur' sera indéfini. Une dernière chose, en raison de la façon dont les valeurs sont contraintes, 'array ['1']' est toujours un index numérique, même si vous passez une chaîne. – sztrzask