【问题标题】:Extract all property values into an array in ES6将所有属性值提取到 ES6 中的数组中
【发布时间】:2018-03-08 10:38:00
【问题描述】:

假设我有一个数组:

var x = [ { id: 1, name: "abc"}, { id: 2, name: "def" }];

我想将id 属性的值提取到一个数组中,得到这个:

[1, 2]

this question 中所述,一种方法是:

var ids = x.map(function(a) { return a.id; });

如何在 ES6 中使用任何新功能/语法并以更简洁的方式实现相同的结果?

(我正在为 Node 8 写作)

【问题讨论】:

  • 不确定代码是否可以以“更简洁的方式”组成。您是否引用了使用的字符数?

标签: javascript arrays node.js ecmascript-6


【解决方案1】:

使用箭头函数会更简洁一点:

var ids = x.map(a => a.id);

【讨论】:

    【解决方案2】:

    您可以使用带有隐式返回的箭头函数使其更加简洁:

    var ids = x.map(a => a.id);
    

    【讨论】:

      【解决方案3】:

      你也可以在ES6中使用数组的reduce函数

      var x = [ { id: 1, name: "abc"}, { id: 2, name: "def" }],
          res = x.reduce((r,v)=>r.concat(v.id),[]);
      console.log(res);

      【讨论】:

      • .reduce() 似乎不像 .map() 那样适合此目的。
      • @jfriend00 我能知道reduce似乎不好的原因吗?
      • 因为.map() 的目的是生成一个新数组,该数组是原始数组的一对一映射,而这正是该操作想要做的。要在您的.reduce() 版本中生成汇总数组,您必须手动为每个不断生成新数组的元素连接一个新数组,将所有以前的值复制到一个新数组中——所有这些都不是很有效。使用.map() 来准确地构建它会更有效。您也可以使用.forEach() 甚至是普通的for 循环。我们感兴趣的是哪种方法最适合和简洁。
      • 另外,您的 .reduce() 方法并不比 OP 已经拥有的 var ids = x.map(function(a) { return a.id; }); 更简洁。
      猜你喜欢
      • 2021-05-24
      • 1970-01-01
      • 2010-12-15
      • 2017-09-29
      • 2022-01-10
      相关资源
      最近更新 更多