251 votes

Comment créer un tableau d'objets littéraux dans une boucle ?

J'ai besoin de créer un tableau d'objets littéraux comme ceci :

var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......

Dans une boucle comme celle-ci :

for (var i = 0; i < oFullResponse.results.length; i++) {
    console.log(oFullResponse.results[i].label);
}

La valeur de key devrait être results[i].label dans chaque élément du tableau.

451voto

RaYell Points 26761
var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}

18 votes

Vous pouvez ignorer le var obj = { il suffit d'appuyer sur le littéral lui-même.

0 votes

Je calculerai length une seule fois.

3 votes

Calculer la longueur une seule fois est probablement une bonne idée, j'ai choisi d'ajouter un var obj pour rendre le code plus clair, vous pouvez bien sûr le sauter, vous pouvez écrire tout le script en une seule ligne si vous le souhaitez :)

62voto

Triptych Points 70247

La réponse de RaYell est bonne - elle répond à votre question.

Il me semble cependant que vous devriez créer un objet dont les clés sont des étiquettes et dont les valeurs sont des sous-objets :

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

L'approche ci-dessus devrait être beaucoup plus rapide et idiomatique que la recherche d'une clé dans l'ensemble du tableau d'objets pour chaque accès.

0 votes

+1 depuis la solution clé, est plus logique et m'aide à répondre à mes besoins :)

0 votes

Il semble qu'il manque un point-virgule après la définition de la clé var ?

0 votes

Bonne réponse, j'ai cherché comment accéder à l'information pendant un certain temps, merci

38voto

tetra master Points 327

Vous pouvez faire quelque chose comme cela dans ES6.

new Array(10).fill().map((e,i) => {
   return {idx: i}
});

22voto

Endless Points 1188

C'est ce que Tableau#map sont bons

var arr = oFullResponse.results.map(obj => ({
    key: obj.label,
    sortable: true,
    resizeable: true
}))

4voto

Manjunath Raddi Points 193

Cela fonctionnera :

 var myColumnDefs = new Object();
 for (var i = 0; i < oFullResponse.results.length; i++) {
     myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X