JavaScript - 从对象数组创建数组的好方法

5

我有一个JavaScript对象数组:

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

我想创建一个仅包含x值的新数组:
[ 'x1', 'x2', ..., 'xn' ]

我可以轻松地在 for 循环中完成这个操作:

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

...但我想知道是否有使用jQuery或普通JavaScript的简洁方法来完成这个操作?


3
你的代码中的对象部分是错误的。你的x/y对象没有任何键。我只是想指出这一点。 - Sasha Chedygov
@musicfreak 我认为他的意思是他的对象有两个属性,x和y:{x: foo, y:bar}。 - Gabe Moothart
@Gabe - 你是对的,我是指对象具有属性。 - mawaldne
3个回答

11

你可以使用 map 来完成这个操作:

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

3

ECMAScript 5 特性拥有一个原生的 map() 方法:

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

在Firefox中,这甚至比循环更快,但这并不适用于所有浏览器(Opera);其他浏览器甚至不支持它(IE)。

如果他不关心跨浏览器的解决方案,那么在支持Javascript 1.8的FF中,他可以这样做:var arr = array.map(function(v) v.x);或者:var arr = [v.x for each (v in array)]; - Prestaul
不幸的是,跨浏览器兼容性是必要的。 - mawaldne

0

如果你需要处理大量数据,你可以使用jLinq (免责声明:这是我的项目)来选择和查询记录,然后返回你想要的结果。

同样,这主要用于处理大量对象和进行查询,但你可能可以从源代码中获取一些灵感。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接