2009-06-11 2 views
4

У меня есть яваскрипт массив объектов:Javascript - Хороший способ создать массив из массива объектов

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

Я хочу, чтобы создать новый массив только за x значений:

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

I может легко сделать это в for петле ...:

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

... но мне интересно, если есть хороший способ с одним лайнером сделать это с помощью jquery или даже обычного javascript?

+3

Неверная часть объекта вашего кода. У ваших объектов x/y нет никаких ключей. Просто подумал, что я это укажу. –

+0

@musicfreak Я думаю, что он имеет в виду, что его объекты имеют два свойства: x и y: {x: foo, y: bar} –

+0

@Gabe - Вы правы, я имел в виду, что объекты имеют свойства – mawaldne

ответ

10

Вы можете сделать это с map:

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

Конечно, это для работы с большим количеством данных, вы можете использовать jLinq (disclaimer: my project) для выбора и запросы к записи, а затем вернуть то, что вы хотите.

Опять же, это действительно так, когда вы работаете с большим количеством объектов и делаете запросы, но вы можете получить некоторые идеи, глядя на исходный код.

3

ECMAScript 5 имеет нативную map() метода:

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

В FF, это должно быть даже быстрее, чем цикл, но это не верно для всех браузеров (Opera); другие даже не поддерживают его (IE).

+0

Если он не заботится о кросс-браузерное решение, то в FF (которое поддерживает Javascript 1.8) он мог бы делать: var arr = array.map (function (v) vx); или: var arr = [v.x для каждого (v в массиве)]; – Prestaul

+0

К сожалению, необходима кросс-браузерная совместимость. – mawaldne

Смежные вопросы