Wie eine Reihe von Objektliterale in einer Schleife zu schaffen?
-
18-09-2019 - |
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.
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
}
});