Question

Je dois créer un tableau de littéraux d'objet comme ceci:

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

Dans une boucle comme ceci:

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

La valeur de key doit être results[i].label dans chaque élément de la matrice.

Était-ce utile?

La solution

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

Autres conseils

La réponse de RaYell est bon -. Il répond à votre question

Il me semble bien que vous devriez vraiment créer un objet calée par des étiquettes avec des sous-objets comme valeurs:

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 idiomatiques que de chercher l'ensemble du réseau d'objets pour une clé pour chaque accès.

est ce que Tableau # map sont bonnes à

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

Dans la même idée de Nick Riggs, mais je crée un constructeur, et une poussée d'un nouvel objet dans le tableau en l'utilisant. Il éviter la répétition des clés de la classe:

var arr = [];
var columnDefs = function(key, sortable, resizeable){
    this.key = key; 
    this.sortable = sortable; 
    this.resizeable = resizeable;
    };

for (var i = 0; i < len; i++) {
    arr.push((new columnDefs(oFullResponse.results[i].label,true,true)));
}

Cela fonctionne:

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

Vous pouvez faire quelque chose comme ça dans ES6.

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

Je crée le tableau, puis ajouter les objets littéraux à lui.

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}
var myColumnDefs = new Array();

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

Si vous voulez aller encore plus loin que @tetra avec ES6 vous pouvez utiliser la soi-disant « syntaxe propagation objet » et faire quelque chose comme ceci:

let john = {
    firstName: "John",
    lastName: "Doe",
};

let people = new Array(10).fill().map((e, i) => {

    return {
        ...john,
        id: i
    }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top