Frage

Ich brauche eine Reihe von Objektliterale wie diese zu erstellen:

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

In einer Schleife wie folgt:

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

Der Wert von key in jedem Element des Arrays results[i].label werden sollte.

War es hilfreich?

Lösung

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

Andere Tipps

RaYell Antwort ist gut -. Es Ihre Frage beantwortet

Es scheint mir aber, dass Sie wirklich ein Objekt von Etiketten mit Unterobjekten als Werte eingegeben zu schaffen sein sollte:

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;

Der obige Ansatz sollte viel schneller und idiomatische sein als bei jedem Zugriff des gesamte Objekt-Array für einen Schlüssel zu suchen.

Dies ist, was Array # map sind gut

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

In der gleichen Idee von Nick Riggs aber ich schaffe einen Konstruktor und einen Push ein neues Objekt in dem Array, indem Sie es. Es vermeidet, dass die Wiederholung des Schlüssels der Klasse:

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

Dies funktioniert:

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

Sie können in ES6 so etwas tun.

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

Ich würde das Array erstellen und dann die Objektliterale ihm anhängen.

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

Wenn Sie noch weiter als @tetra mit ES6 gehen möchten, können Sie die so genannte verwenden „ Objekt Verbreitung Syntax “ und etwas tun, wie folgt aus:

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

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

    return {
        ...john,
        id: i
    }
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top