2009-06-11 8 views
4

J'ai un tableau d'objets javascript:Javascript - Une bonne façon de créer un tableau à partir d'un tableau d'objets

array = [ {x:'x1', y:'y1'}, {x:'x2', y:'y2'}, ... {x:'xn', y:'yn'} ] 

Je veux créer un nouveau tableau de seulement les x valeurs:

[ 'x1', 'x2', ..., 'xn' ] 

I pourrait le faire facilement dans une boucle for ...:

var newarray = []; 
for (var i = 0; i < array.length; i++){ 
    newarray.push(array[i].x); 
} 

... mais je me demande s'il y a un un moyen de doublure agréable pour le faire en utilisant jquery ou même javascript régulier?

+3

La partie objet de votre code est erronée. Vos objets x/y n'ont aucune clé. Je pensais juste que je le signalerais. –

+0

@musicfreak Je pense qu'il veut dire que ses objets ont deux propriétés, x et y: {x: foo, y: bar} –

+0

@Gabe - Vous avez raison, je voulais dire que les objets ont des propriétés – mawaldne

Répondre

10

Vous pouvez le faire avec map:

var newarray = jQuery.map(array, function (item) { return item.x; }); 
0

Cédée est de travailler avec beaucoup de données, vous pouvez utiliser jLinq (disclaimer: my project) pour sélectionner et interroger vos enregistrements, puis retourner ce que vous voulez. Encore une fois, c'est vraiment le cas lorsque vous travaillez avec beaucoup d'objets et que vous faites des requêtes, mais vous pourriez être en mesure d'obtenir quelques idées en regardant le code source.

3

ECMAScript 5 propose une méthode map() native:

var newArray = array.map(function(value) { return value.x; }); 

Dans FF, cela devrait même être plus rapide que le bouclage, mais ce n'est pas vrai pour tous les navigateurs (Opera); d'autres ne le supportent même pas (IE).

+0

S'il ne se soucie pas de une solution de navigateur croisé alors en FF (qui supporte Javascript 1.8) qu'il pourrait faire: var arr = array.map (fonction (v) vx); Ou var arr = [v.x pour chaque (v dans la matrice)]; – Prestaul

+0

Malheureusement, la compatibilité croisée est nécessaire. – mawaldne

Questions connexes