Javascript 在映射函数中生成字符串的多个条件

Javascript 在映射函数中生成字符串的多个条件,javascript,loops,dictionary,ecmascript-6,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 A

我存储的阵列如下所示:

let arr = [
  {
   name: "James",
   age: 24
  },
   name: "Patrick", 
   age: 20
  },
  {
   name: "John",
   age: 23
  }
];
我正在尝试获取一个字符串,该字符串如下所示:

Hi James, Patrick and John
        ^          ^
        |          |
      Comma       And
在每个名称后面添加一个
(逗号),但不要在最后一个名称之前添加。最后一个单词前面的单词
。我正在使用地图:

arr.map((l,i) =>
  <span key={i}>
    {i < arr.length - 1 ? `${l.name}, ` :
     i === arr.length - 1 ? `and ${l.name}.` : ''}
  </span>)
有没有一个美丽而简单的方法可以得到这样的结果?还有一个纯函数,可以处理数组中所有数量的名称?最好使用ES6。。谢谢

您可以使用
reduce()
来执行此操作

让arr=[{
姓名:“詹姆斯”,
年龄:24
}, {
姓名:“帕特里克”,
年龄:20
}, {
姓名:“约翰”,
年龄:23
}];
var结果=arr.REDUCT(函数(r,e,i){
如果((i+1)=(arr.length-1)){
r+=e.name;
}如果((i+1)!=阵列长度){
r+=e.name+',';
}否则{
r+='和'+e.name;
}
返回r;
}"嗨",;
console.log(result)
您可以使用
reduce()
执行此操作

让arr=[{
姓名:“詹姆斯”,
年龄:24
}, {
姓名:“帕特里克”,
年龄:20
}, {
姓名:“约翰”,
年龄:23
}];
var结果=arr.REDUCT(函数(r,e,i){
如果((i+1)=(arr.length-1)){
r+=e.name;
}如果((i+1)!=阵列长度){
r+=e.name+',';
}否则{
r+='和'+e.name;
}
返回r;
}"嗨",;
console.log(结果)
您可以这样做

arr.map((l,i) =>
  if (i <arr.length-1) {
    if(i === arr.length-2) {
  <span key={i}>
     {`${l.name} `}
  </span>)
    } else {
  <span key={i}>
     {`${l.name}, `}
  </span>)        
    }
  } else {
  <span key={i}>
     `and ${l.name}.`
  </span>)
 }
arr.map((l,i)=>
如果(i你能做到这一点

arr.map((l,i) =>
  if (i <arr.length-1) {
    if(i === arr.length-2) {
  <span key={i}>
     {`${l.name} `}
  </span>)
    } else {
  <span key={i}>
     {`${l.name}, `}
  </span>)        
    }
  } else {
  <span key={i}>
     `and ${l.name}.`
  </span>)
 }
arr.map((l,i)=>

如果(i您可以尝试使用以下代码

arr.map((l,i) =>
  <span key={i}>
    {i < arr.length - 1 && i !== arr.length - 2 ? `${l.name}, ` : ''}
    {i === arr.length - 2 ?  `${l.name} ` : ''}
    {i === arr.length - 1 ? `and ${l.name}.` : ''}
  </span>)
arr.map((l,i)=>
{i
您可以尝试使用以下代码

arr.map((l,i) =>
  <span key={i}>
    {i < arr.length - 1 && i !== arr.length - 2 ? `${l.name}, ` : ''}
    {i === arr.length - 2 ?  `${l.name} ` : ''}
    {i === arr.length - 1 ? `and ${l.name}.` : ''}
  </span>)
arr.map((l,i)=>
{i
我想你在找

const names = arr.map((l,i) => html`<span key="${i}">${l.name}</span`);
const last = names.pop();
return names.length ? names.join(", ") + " and  " + last : last;

constnames=arr.map((l,i)=>html`${l.name}我想您正在寻找

const names = arr.map((l,i) => html`<span key="${i}">${l.name}</span`);
const last = names.pop();
return names.length ? names.join(", ") + " and  " + last : last;

const names=arr.map((l,i)=>html`${l.name}为什么要省略牛津逗号??(为什么要省略牛津逗号;(最终条件
i===arr.length-1
将始终是
true
,因此您可以省去它,而
:“
最终条件
i===arr.length-1
将始终是
true
,因此您可以省去它和
:”
我认为您应该在名称之前添加两个分隔符,或者两者都添加在名称之后,当前代码有点难理解。我认为您应该在名称之前添加两个分隔符,或者在名称之后添加两个分隔符,当前代码有点难理解。