2012-03-06 3 views

Répondre

2

Avec jQuery, vous pouvez dire:

var b = $.map(a, function(val, i) { return val.name; }); 

jQuery's $.map() method est équivalent à son propre Array.map() method JavaScript, sauf celui-ci est une caractéristique relativement récente de JS et ne fonctionne donc pas dans les anciens navigateurs (ie, pré-IE9).

+0

J'aime cette solution mieux qu'une boucle, nous utilisons jQuery et je déf. préférez une fonction de commodité plutôt que d'avoir à écrire une autre boucle g-damned –

+0

Cool. Évidemment, si vous aviez du code qui devait être ultra-efficace, vous écririez votre propre boucle pour enregistrer tous les appels de fonction, mais pour les cas «normaux», c'est beaucoup plus agréable de laisser '.map()' cacher la boucle de vous. – nnnnnn

2

Si vous ne se soucient pas de navigateurs plus anciens, vous pouvez utiliser le ES5 map method:

b = a.map(function(elem) { 
    return elem.name; 
}); 

Si vous souciez les anciens navigateurs, vous pouvez Polyfill la map méthode (MDN provides a decent polyfill) ou vous pouvez utiliser une boucle normale, comme vous le suggérez (bien que évidemment la méthode map utilise une forme de boucle de toute façon).

+0

+1 pour "ne pas se soucier de l'ancien navigateur" solutions! – kinakuta

0

Vous auriez à boucler. Il existe diverses fonctions de manipulation de collections qui sont maintenant cuites dans la langue. Un si ceux qui seraient utiles ici est map.

var b = a.map(function(person) { 
    return person.name; 
}); 

Commander la bibliothèque Underscore.js qui fait beaucoup d'opérations comme facile. Il a une méthode nommée pluck qui serait idéale ici.

var b = _.pluck(a, 'name'); 
3

Une boucle doit être utilisée sous une forme quelconque. Soit par votre code ou par une fonction que vous appelez pour faire la copie d'éléments spécifiques. La solution à l'aide dire map utilise encore une boucle sous le capot

for (var i = 0; i < a.length; i++) { 
    b.push(a[i].name); 
} 
0

Vous auriez besoin de parcourir it pour produire un nouveau tableau en b avec chaque nom.

0

Il nécessite une boucle, mais il existe des fonctions de bibliothèque qui permettent de faire abstraction de la boucle pour vous. Je suis parti à l'utilisation Underscore.js pour ce genre de choses (et je l'obtiens généralement gratuitement puisque j'utilise Backbone libéralement) mais vous pouvez trouver des fonctions similaires dans JQuery comme $.map

Questions connexes