webentwicklung-frage-antwort-db.com.de

Wie erstelle ich ein Array von Objektliteralen in einer Schleife?

Ich muss ein Array von Objektliteralen wie folgt 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 sollte in jedem Element des Arrays results[i].label sein.

208
codecowboy
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
    });
}
363
RaYell

Die Antwort von RaYell ist gut - es beantwortet Ihre Frage.

Es scheint mir jedoch, dass Sie wirklich ein Objekt erstellen sollten, das durch Beschriftungen mit Unterobjekten als Werte gekennzeichnet ist:

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 idiomatischer sein als das Durchsuchen des gesamten Objektarrays nach einem Schlüssel für jeden Zugriff.

57
Triptych

Dies ist, was Array # map gut sind

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

In der gleichen Idee von Nick Riggs habe ich aber einen Konstruktor erstellt und ein neues Objekt in das Array gepusht, indem er es verwendet. Es vermeidet die Wiederholung der Schlüssel 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)));
}
5
JPIyo

Das wird funktionieren:

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

Ich würde das Array erstellen und dann die Objektliterale 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};
}
3
BenM
var myColumnDefs = new Array();

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

Sie können so etwas in ES6 machen.

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

Wenn Sie mit ES6 noch weiter gehen möchten als @tetra, können Sie die sogenannte " Object Spread Syntax " verwenden und so etwas tun:

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

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

    return {
        ...john,
        id: i
    }
});
0
Pe Wu