Ich bin nicht ganz sicher, was Sie Ihren Code wollen tun werden, also werde ich eine Menge von Annahmen, hier zu machen.
Beginnen wir mit dem, was Sie gerade in Ihrer Frage:
var array = [{someValue: 5}, {someOtherValue: 10}];
var newArray = [];
var obj = {value: "someValue"};
var setValue = function(choosenValue) {
for (let i = 0; i < array.length; i++) {
newArray.push({
choosenValue: array[i].choosenValue
});
}
}
setValue(obj.value);
Es sieht aus wie das, was Sie tun möchten gesetzt Wert newArray
basierend auf dem Wert des Eintrags von array
mit dem Namen choosenValue
. Das heißt, für irgendeinen Wert von choosenValue
muss ein Eintrag in array
mit diesem Namen vorhanden sein.
In erster Linie ist diese Art von Logik typischer für einen Map/Dictionary-Datentyp als für einen Array-Datentyp.Also statt
var array = [{someValue: 5}, {someOtherValue: 10}]
ein einfaches und logisches Konstrukt würde aussehen wie
var map = { someValue: 5, someOtherValue: 10 }
Dann können Sie auf die Wert von map
beziehen von
map.someValue
verwenden oder mit Ihrem choosenValue
Variable
map[choosenValue]
Keine Funktion oder Schleifen notwendig.
Aber schauen wir uns diese Schleife trotzdem an. Was es gerade macht, ist zu sagen: "Für jeden Eintrag in array
möchte ich den Wert der Eigenschaft choosenValue
". Wenn man bedenkt, dass die Objekte, die in array
gespeichert sind, aus einer einzigen Eigenschaft bestehen, die someValue
in einem und in dem anderen genannt wird, erhalten Sie garantiert einen undefined
, wenn Sie versuchen, choosenValue
auf jedes Objekt zu erhalten.
Wenn das, was Sie wollten, war eine Liste von Eigenschaftswerten aus einer Menge von Objekten mit ähnlichen Eigenschaftsnamen zu erhalten, was sollte man würde dies etwas mehr wie sein:
var array = [{ someValue: 5, someOtherValue: 10 } ,
{ someValue: 6, someOtherValue: 12 }]
var newArray = [];
var setValue = function(choosenValue) {
for (let i = 0; i < array.length; i++) {
newArray.push(array[i][choosenValue]);
}
}
Nun ist diese deutlich sagt: „Für jedes Element in array
, erhalten Sie mir den Wert der Eigenschaft von choosenValue
benannt ".
Aus Gründen der Klarheit habe ich auch obj
entfernt, die eine unnötige Verkapselung eingeführt . Ich habe auch keine Objekte auf newArray
geschoben. In gewisser Hinsicht sind die Werte von newArray
bereits eine Menge von choosenValue
, denn das ist es, was ein Array darstellen soll: eine Menge logisch zusammenhängender Daten desselben Typs. Wenn newArray
stellt tatsächlich eine Reihe von Objekten, und choosenValue
ist nur eine von möglicherweise vielen Bereichen auf jedes Objekt, dann
newArray.push({ choosenValue: array[i][choosenValue] });
angemessen wäre.
EDIT
Nach Ihrem bearbeiten, was Sie wirklich wollen, ist das Feld, Namen und alle, zu entreißen und es in einem neuen Objekt zu setzen. Das ist etwas knifflig, da JavaScript (zumindest ECMAScript 5) es nicht mag, wenn Sie den Namen eines Feldes über den Wert eines anderen Feldes setzen. Zumindest nicht während des Objektbaus. Die Lösung ist ein leeres Objekt zuerst zu erstellen, und dann ein Feld über Array-Notation gesetzt, etwa so:
var obj = {}
obj[fieldname] = "someval"
In Bezug auf den Code, soll die Schleife dann in etwa so aussehen:
for (let i = 0; i < array.length; i++) {
var temp = {}
temp[choosenValue] = array[i][choosenValue]
newArray.push(temp)
}
Nicht die eleganteste Schlaufe, aber sie erledigt die Arbeit.
1 - Wenn ein Objekt nur ein Feld hat und Sie dieses Feld herausziehen und übergeben, sollten Sie das Feld im Allgemeinen einfach aus dem Kapselungstyp herausziehen und es blank verwenden. Die Zeiten, in denen es in einem einkapselnden Typ in Ordnung ist, sind, wenn Sie das gesamte Objekt übergeben und weitere Felder in der Zukunft hinzufügen möchten.
was ist array im code? Fehlt dir hier irgendetwas – Geeky
Was denkst du, dass 'array [i] .choosenValue 'bedeutet? Wenn Sie Ihren Parameter verwenden möchten, verwenden Sie einfach Ihren Parameter. – SLaks
Bitte geben Sie mehr von Ihrem Code. Wo ist 'Array' definiert? –