Javascript对象数组获得单个值

时间:2014-04-12 20:56:22

标签: javascript arrays

假设我有一系列对象:

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"]

我知道如何通过循环获得所需的结果,我只是希望存在可以在一行中执行此操作的数组函数或函数组合。

3 个答案:

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