我正在存储一个类似于:
的数组let arr = [
{
name: "James",
age: 24
},
name: "Patrick",
age: 20
},
{
name: "John",
age: 23
}
];
我想获得一个看起来像的字符串:
Hi James, Patrick and John
^ ^
| |
Comma And
在每个名称后面添加,
(逗号),但不能在最后一个名称之后添加And
。在最后一个单词之前的单词arr.map((l,i) =>
<span key={i}>
{i < arr.length - 1 ? `${l.name}, ` :
i === arr.length - 1 ? `and ${l.name}.` : ''}
</span>)
。我正在使用Map:
James, Patrick, and John
^
|
This is Extra
我明白了:
connect
有没有一种美丽而简单的方法来获得这样的结果?和一个纯粹的函数,可以处理数组中的所有名称?最好是ES6 ..谢谢!
答案 0 :(得分:3)
您可以使用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)
&#13;
答案 1 :(得分:1)
我认为你正在寻找
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;
不要将map
用于所有项目不相同的部分。
答案 2 :(得分:0)
你可以这样做。
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>)
}
答案 3 :(得分:0)
您可以尝试使用以下代码
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>)