web-dev-qa-db-fra.com

Renvoyer uniquement certaines propriétés d'un tableau d'objets en Javascript

Si j'ai un objet tel que

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

Et créer un tableau de ces objets

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

existe-t-il un moyen de ne récupérer qu'une seule des propriétés de tous les objets du tableau? Par exemple:

var keyArray = objArray["key"]; 

L'exemple ci-dessus ne renvoie rien à set keyArray, mais j'espérais qu'il serait réglé sur quelque chose comme ceci:

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

Est-ce que quelqu'un sait comment faire cela sans effectuer une itération dans objArray et en copiant manuellement chaque propriété de clé dans le tableau de clés?

16
ragesalmon

Ceci se fait facilement avec la fonction Array.prototype.map () :

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

Si vous faites cela souvent, vous pouvez écrire une fonction qui extrait la carte de manière abstraite:

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

En fait, la bibliothèque Underscore a une fonction intégrée appelée pluck qui fait exactement cela.

17
Jacob Krall

Vous voudriez faire quelque chose comme ça:

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

Voici un JSFiddle à démo: http://jsfiddle.net/Q7Cb3/


Si vous avez besoin d'une ancienne prise en charge de navigateur, vous pouvez utiliser votre propre méthode:

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"]

Exemple de JS Bin

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

Notez que les navigateurs plus anciens peuvent ne pas supporter map mais vous pouvez le faire facilement avec une boucle for:

var keys = [];

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

Exemple de JS Bin

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

0
Miguel Mota

Eh bien quelque chose doit parcourir les éléments du tableau. Vous pouvez utiliser .map() pour le rendre joli:

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

Vous pouvez créer une fonction pour générer une fonction permettant de récupérer une clé particulière:

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

Ensuite:

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

Vraiment "objArray" est un tableau qui a 3 objets à l'intérieur, si vous voulez une liste de clés, vous pouvez essayer ceci:

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

Vous avez dans var clés, les trois clés.

J'espère que cela pourra aider! :)

0
Rubén Guerrero