从另一个数组的变量创建数组的快速方法?

时间:2012-03-06 22:50:25

标签: javascript jquery

假设我有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"]

6 个答案:

答案 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