对对象数组中的值执行 .join

新手上路,请多包涵

如果我有一个字符串数组,我可以使用 .join() 方法获取单个字符串,每个元素用逗号分隔,如下所示:

["Joe", "Kevin", "Peter"].join(", ") // => "Joe, Kevin, Peter"

我有一个对象数组,我想对其中保存的值执行类似的操作;所以从

[
  {name: "Joe", age: 22},
  {name: "Kevin", age: 24},
  {name: "Peter", age: 21}
]

仅对 join 属性执行 name 方法,以实现与以前相同的输出。

目前我有以下功能:

function joinObj(a, attr){
  var out = [];

  for (var i = 0; i < a.length; i++){
    out.push(a[i][attr]);
  }

  return out.join(", ");
}

这段代码没有任何问题,它可以工作,但突然之间,我已经从一个简单、简洁的代码行变成了一个非常命令式的函数。有没有更简洁、更实用的写法?

原文由 jackweirdy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 859
2 个回答

如果您想将对象映射到某物(在本例中为属性)。我认为 Array.prototype.map 是您正在寻找的功能,如果您想进行功能性编码。

(小提琴)

如果您想支持不 符合 ES5 的旧浏览器,您可以对其进行填充(上面的 MDN 页面上有一个 polyfill)。另一种选择是使用 underscorejs 的 pluck 方法:

 var users = [
 {name: "Joe", age: 22},
 {name: "Kevin", age: 24},
 {name: "Peter", age: 21}
 ];
 var result = _.pluck(users,'name').join(",")

原文由 Benjamin Gruenbaum 发布,翻译遵循 CC BY-SA 4.0 许可协议

那么你总是可以覆盖对象的 toString 方法:

     var arr = [
        {name: "Joe", age: 22, toString: function(){return this.name;}},
        {name: "Kevin", age: 24, toString: function(){return this.name;}},
        {name: "Peter", age: 21, toString: function(){return this.name;}}
    ];

    var result = arr.join(", ");
    console.log(result);

原文由 basilikum 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题