假设我有一系列对象:
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
是否有一个数组函数允许我将一个属性作为数组, 例如:
namesArray = employees.reduceToProperty('name'); // none existent function i made up!
// should return ["George","Edward","Christine","Sarah"]
我知道如何通过循环获得所需的结果,我只是希望存在可以在一行中执行此操作的数组函数或函数组合。
答案 0 :(得分:8)
var names = employees.map(function(i) {
return i.name;
});
names
现在是一个包含对象name
- 属性的数组。
答案 1 :(得分:3)
Array.prototype.map
将一个数组映射到另一个数组:
var names = employees.map(function (val) {
return val.name;
});
// ['George', 'Edward', 'Christine', 'Sarah']
答案 2 :(得分:1)
如果您经常发现这种情况,可以考虑使用Underscore / Lo-Dash中的pluck
:
var listOfPropertyNames = _.pluck(list, 'propertyName');
如果您不想包含库,当然可以编写自己的pluck
以便在您的代码库中使用:
function pluck(list, propertyName) {
return list.map(function(i) {
return i[propertyName];
});
}
运行它:
pluck([{name: 'a'}, {name: 'b'}], 'name');
["a", "b"]
您必须决定如何处理边缘情况,例如:
undefined