javascript - 在 Map 函数中生成字符串的多个条件

标签 javascript loops dictionary ecmascript-6

我正在存储一个如下所示的数组:

let arr = [
  {
   name: "James",
   age: 24
  },
   name: "Patrick", 
   age: 20
  },
  {
   name: "John",
   age: 23
  }
];

我正在尝试获取如下所示的字符串:

Hi James, Patrick and John
        ^          ^
        |          |
      Comma       And

在每个名称后添加一个 ,(逗号),但不在最后一个名称之后。和单词 And 就在最后一个单词之前。我正在使用 map :

arr.map((l,i) =>
  <span key={i}>
    {i < arr.length - 1 ? `${l.name}, ` :
     i === arr.length - 1 ? `and ${l.name}.` : ''}
  </span>)

我得到:

James, Patrick, and John
              ^
              |
         This is Extra 

有没有一种漂亮而简单的方法可以得到这样的结果?和一个纯函数并且可以处理数组中所有名称的函数?最好使用 ES6.. 谢谢!

最佳答案

你可以使用reduce()来做到这一点

let arr = [{
  name: "James",
  age: 24
}, {
  name: "Patrick",
  age: 20
}, {
  name: "John",
  age: 23
}];

var result = arr.reduce(function(r, e, i) {
  if ((i + 1) == (arr.length - 1)) {
    r += e.name;
  } else if ((i + 1) != arr.length) {
    r += e.name + ', ';
  } else {
    r += ' and ' + e.name;
  }
  return r;
}, 'Hi ');

console.log(result)

关于javascript - 在 Map 函数中生成字符串的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39192993/

相关文章:

mysql - 如何使用包含子查询的 mysql 查询编写循环 bash 脚本?

mysql - 不使用循环更新 SQL 表的正确方法

python - 使用 for 循环从数据框中选择一个值

python - 使用过滤器和映射在 python 中查找扩展名为 .txt 和 .py 的目录中的所有文件

c# - 更改 C# 字典中项目的基数

python - 如何从 Python 字典创建自定义 CSV 文件?

javascript - 如何在也是延迟 promise 的函数中使用 when then 顺序发送文件上传?

javascript - 使用 Javascript 解析自定义标签

javascript - 在 AJAX 请求错误时显示 Bootstrap 警报

javascript - 在整个表单上应用 onChange 事件