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

2022-08-29 23:35:08

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

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

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

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

仅在属性上执行该方法,以实现与以前相同的输出。joinname

目前我有以下功能:

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

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

  return out.join(", ");
}

该代码没有错,它可以工作,但是突然之间,我从一个简单,简洁的代码行变成了一个非常命令式的函数。有没有一种更简洁,理想情况下更实用的方法来写这个?


答案 1

如果要将对象映射到某些内容(在本例中为属性)。我认为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(",")

答案 2

好吧,你总是可以覆盖你的对象的方法: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);