如果我有一个字符串数组,我可以使用.join()方法来获取单个字符串,每个元素用逗号分隔,如下所示:
["Joe", "Kevin", "Peter"].join(", ") // => "Joe, Kevin, Peter"我有一个对象数组,并且我想对其中保存的值执行类似的操作;所以从
[
  {name: "Joe", age: 22},
  {name: "Kevin", age: 24},
  {name: "Peter", age: 21}
]仅对name属性执行join方法,以获得与前面相同的输出。
目前我有以下功能:
function joinObj(a, attr){
  var out = [];
  for (var i = 0; i < a.length; i++){
    out.push(a[i][attr]);
  }
  return out.join(", ");
}这段代码没有错,它可以工作,但是突然之间,我从一行简单、简洁的代码变成了一个非常命令式的函数。有没有一种更简洁、更理想、更实用的方式来写这篇文章呢?
发布于 2013-06-10 21:38:45
我也遇到过使用reduce方法,它看起来是这样的:
console.log(
    [
        {name: "Joe", age: 22},
        {name: "Kevin", age: 24},
        {name: "Peter", age: 21}
    ]
    .reduce(function (a, b) {
        return (a.name || a) + ", " + b.name}
    )
)
(a.name || a)是正确的,所以第一个元素被正确地处理,但是其余的(其中a是一个字符串,所以a.name是未定义的)不被当作对象来处理。
编辑:我现在将其进一步重构为:
x.reduce(function(a, b) {return a + ["", ", "][+!!a.length] + b.name;}, "");我认为这样更简洁,因为a总是一个字符串,b总是一个对象(因为在reduce中使用了optional initialValue parameter )
6个月后编辑:哦,我到底在想什么。“清洁工”我激怒了代码之神。
https://stackoverflow.com/questions/16607557
复制相似问题