假设我有2个阵列:
var a = [];
var b = [];
a.push({id:1, name:"Joe"});
a.push({id:2, name:"Jeff"});
a.push({id:3, name:"John"});
是否有快速方法在Javascript中使用b
的名称填充a
,还是必须使用循环?
,例如:
b = a[].name; // b is now ["Joe","Jeff","John"]
答案 0 :(得分:3)
必须以某种形式使用循环。通过您的代码或您调用的函数来执行特定元素的副本。使用说map
的解决方案仍然使用引擎盖下的循环
for (var i = 0; i < a.length; i++) {
b.push(a[i].name);
}
答案 1 :(得分:2)
如果您不关心旧浏览器,可以使用ES5 map
method:
b = a.map(function(elem) {
return elem.name;
});
如果你关心旧的浏览器,你可以填充map
方法(MDN provides a decent polyfill),或者你可以像你的建议那样使用普通循环(虽然显然map
方法使用无论如何,某种形式的循环。)
答案 2 :(得分:2)
使用jQuery,您可以说:
var b = $.map(a, function(val, i) { return val.name; });
jQuery's $.map()
method相当于JavaScript自己的Array.map()
method,但后者是JS的一个相对较新的功能,因此在旧版浏览器中不起作用(即IE9之前版本)。
答案 3 :(得分:0)
你必须循环。现在有各种集合操作函数被烘焙到该语言中。如果它们在这里有用,那就是map
。
var b = a.map(function(person) {
return person.name;
});
查看Underscore.js
库,这样可以轻松完成大量此类操作。它有一个名为pluck
的方法,在这里是理想的。
var b = _.pluck(a, 'name');
答案 4 :(得分:0)
您需要迭代a才能在b中生成一个带有每个名称的新数组。
答案 5 :(得分:0)
它需要一个循环,但是有一些库函数可以为你抽象循环。我倾向于将Underscore.js用于这些类型的事情(我通常免费获得它,因为我自由地使用Backbone)但你可以在JQuery中找到类似的函数,例如$.map