15

假设我有一组对象:

var员工=[]员工[0]={姓名:“George”,年龄:32,退休日期:“2014年3月12日”}employees[1]={姓名:“Edward”,年龄:17,退休日期:“2023年6月2日”}employees[2]={姓名:“Christine”,年龄:58,退休日期:“2036年12月20日”}员工[3]={姓名:“Sarah”,年龄:62,退休日期:“2020年4月30日”}

是否有一个数组函数允许我将一个属性作为数组,例如:

namesArray=employees.reduceToProperty('name');//我创造的函数不存在!//应该返回[“乔治”、“爱德华”、“克里斯汀”、“莎拉”]

我知道如何通过循环获得所需的结果,我只是希望存在一个数组函数或函数组合,可以在一行中实现这一点。

1

3个答案

重置为默认值
27

数组原型.map可以用于将一个阵列映射到另一个阵列。

var-names=employees.map(函数(i){返回i.name;});

姓名现在是一个包含名称-对象的属性。

2
2

数组原型.map将一个阵列映射到另一个阵列:

var names=employees.map(函数(val){返回值名称;});//[“乔治”、“爱德华”、“克里斯汀”、“莎拉”]
1
  • 我将此答案标记为重复公认的答案。这封信被拒绝了,因为一分钟后才有人回复,但我仍然认为,我们不需要两次同样的回复。 评论 2023年5月3日13:04
1

如果你发现自己经常这样做,你可以考虑使用摘下来自底芯/Lo-Dash:

var listOfPropertyNames=_.pulch(列表,'propertyName');

如果你不想包含一个库,当然可以自己编写摘下用于您的代码库:

函数pull(list,propertyName){return-list.map(函数(i){return i[属性名称];});}

运行它:

pull([{name:'a'},{name:'b'}],'name');[“a”、“b”]

您必须决定如何处理边缘情况,如:

  • 列表中没有该属性的对象
  • 一个未定义在名单上
  • ?

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.