JavaScript 对象数组获取单个值

14

假设我有一个对象数组:

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

我知道如何使用循环获得所需的结果,但我希望存在一种数组函数或函数组合可以在单行中完成这个操作。


请返回已翻译的文本。 - Felix Kling
3个回答

26

Array.prototype.map 可以用于将一个数组映射到另一个数组。

var names = employees.map(function(i) {
  return i.name;
});

names 现在是一个包含对象的 name 属性的数组。


谢谢Phylax,这正是我想要的。 - Michiel
这是一个简单的例子 :) - 还有更多有用的数组函数,请看这里:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype - phylax
我想将ES6语法添加到这个旧解决方案中,这会使它变得更加简洁。代码如下: const names = employees.map((i) => i.name) - tickietackie
ES6更简洁的语法是:const names = employees.map((i) => i.name)(只是为了使tickietackie的评论更新这个旧解决方案更易读) - Cadoiz

2

Array.prototype.map 方法可以将一个数组映射为另一个数组:

var names = employees.map(function (val) {
    return val.name;
});
// ['George', 'Edward', 'Christine', 'Sarah']

我将这个答案标记为被接受的答案的重复。虽然它只是在一分钟后回答,但被拒绝了。但我仍然认为我们不需要两次相同的答案。 - Cadoiz

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

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