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?
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.
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;
}
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
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
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"));
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! :)