it-swarm.com.de

Rückgabe nur bestimmter Eigenschaften aus einem Array von Objekten in Javascript

Wenn ich einen solchen Gegenstand habe

var object = function(key,text)
{
    this.key = key;
    this.text = text;
}

Und erstellen Sie ein Array dieser Objekte

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');

gibt es eine Möglichkeit, dass ich nur eine der Eigenschaften aller Objekte im Array abrufen kann? Zum Beispiel:

var keyArray = objArray["key"]; 

Das obige Beispiel gibt keyArray auf nichts zurück, aber ich hatte gehofft, dass es so eingestellt wäre:

keyArray = [
    'key1',
    'key2',
    'key3']

Kennt jemand eine Möglichkeit, dies zu tun, ohne das objArray zu durchlaufen und jede Schlüsseleigenschaft manuell in das Schlüsselarray zu kopieren?

16
ragesalmon

Dies ist mit der Funktion Array.prototype.map () problemlos möglich:

var keyArray = objArray.map(function(item) { return item["key"]; });

Wenn Sie dies häufig tun, können Sie eine Funktion schreiben, die die Karte abstrahiert:

function pluck(array, key) {
  return array.map(function(item) { return item[key]; });
}

Tatsächlich hat die Underscore-Bibliothek eine eingebaute Funktion namens pluck , die genau das tut.

17
Jacob Krall

Sie möchten so etwas tun:

objArray.map(function (obj) { return obj.key; });

Hier ist ein JSFiddle zur Demo: http://jsfiddle.net/Q7Cb3/


Wenn Sie eine ältere Browserunterstützung benötigen, können Sie Ihre eigene Methode verwenden:

JSFiddle Demo: http://jsfiddle.net/Q7Cb3/1/

function map (arr, func) {
    var i = arr.length;
    arr = arr.slice();
    while (i--) arr[i] = func(arr[i]);
    return arr;
}
0
Robert Messerle
var object = function(key,text) {
    this.key = key;
    this.text = text;
}

var objArray = [];
objArray[0] = new object('key1','blank');
objArray[1] = new object('key2','exampletext');
objArray[2] = new object('key3','moretext');

var keys = objArray.map(function(o,i) {
  return o.key;
});

console.log(keys); // ["key1", "key2", "key3"]

JS-Bin-Beispiel

http://jsbin.com/vamey/1/edit

Beachten Sie, dass ältere Browser map möglicherweise nicht unterstützen, dies ist jedoch mit einer for-Schleife problemlos möglich:

var keys = [];

for (var i = 0; i < objArray.length; i++) {
  keys.Push(objArray[i].key);
}

JS-Bin-Beispiel

http://jsbin.com/redis/1/edit

0
Miguel Mota

Nun etwas muss durch die Elemente des Arrays iterieren. Sie können .map() verwenden, damit es schön aussieht:

var keys = objArray.map(function(o) { return o.key; });

Sie können eine Funktion erstellen, um eine Funktion zum Abrufen eines bestimmten Schlüssels zu generieren:

function plucker(prop) {
  return function(o) {
    return o[prop];
  };
}

Dann:

var keys = objArray.map(plucker("key"));
0
Pointy

Wirklich "objArray" ist ein Array mit 3 Objekten. Wenn Sie eine Liste von Schlüsseln wünschen, können Sie folgendes versuchen:

var keys = [];
for(a in objArray) {
    keys.Push(objArray[a].key);
}

Sie haben in var-Tasten die drei Tasten.

Hoffentlich hilft das! :)

0
Rubén Guerrero