Javascript 在每个对象数组之间插入一个字符串,并为最后一个标记指定一个字符串
我需要显示一个带有逗号和单词“and”的姓名列表作为最后一个标记(例如:John、Stan、Kevin、Jane和Laura)。实际上,我创建了一个函数,但我想改进它。提前感谢您的回复Javascript 在每个对象数组之间插入一个字符串,并为最后一个标记指定一个字符串,javascript,Javascript,我需要显示一个带有逗号和单词“and”的姓名列表作为最后一个标记(例如:John、Stan、Kevin、Jane和Laura)。实际上,我创建了一个函数,但我想改进它。提前感谢您的回复 var选项卡=[ { 姓名:“约翰” },{ 姓名:“斯坦” },{ 姓名:“凯文” },{ 姓名:“简” },{ 名字:“劳拉” } ]; tab=tab.map(函数(e){returne e.name}); tab=tab.join(','); tabIndex=tab.lastIndexOf(',');
var选项卡=[
{
姓名:“约翰”
},{
姓名:“斯坦”
},{
姓名:“凯文”
},{
姓名:“简”
},{
名字:“劳拉”
}
];
tab=tab.map(函数(e){returne e.name});
tab=tab.join(',');
tabIndex=tab.lastIndexOf(',');
tab=tab.substring(0,tabIndex)+“和”+tab.substring(tabIndex+1);
document.getElementById(“text”).innerHTML=tab代码>
您可以使用reduce并执行以下操作
检查此代码段
var选项卡=[{
姓名:“约翰”
}, {
姓名:“斯坦”
}, {
姓名:“凯文”
}, {
姓名:“简”
}, {
名字:“劳拉”
}];
var namesarr=tab.reduce(函数(名称,obj){
名称。推送(对象名称);
返回姓名;
}, []);
var remArray=名称载波拼接(4);
重新安排。取消移位(“和”);
var remString=remArray.join(“”);
log(namesarr.join(“,”).concat(“”).concat(remString))代码>您可以使用reduce并执行以下操作
检查此代码段
var选项卡=[{
姓名:“约翰”
}, {
姓名:“斯坦”
}, {
姓名:“凯文”
}, {
姓名:“简”
}, {
名字:“劳拉”
}];
var namesarr=tab.reduce(函数(名称,obj){
名称。推送(对象名称);
返回姓名;
}, []);
var remArray=名称载波拼接(4);
重新安排。取消移位(“和”);
var remString=remArray.join(“”);
log(namesarr.join(“,”).concat(“”).concat(remString))代码>您可以使用正则表达式简化:
tab = tab.map(function(e) { return e.name })
.join(', ')
.replace(/, ([^,]+)$/, ' and $1');
/,([^,]+)$/
匹配名称后面的最后一个逗号
以下是它的工作原理:
[^,]+
匹配多个没有逗号的字符
$
与文本结尾匹配
([^,]+)
周围的括号将姓氏作为一个分组,替换为替换字符串中的$1
使用此正则表达式,姓氏可以包含空格或其他字符,如代码段中所示
片段:
var选项卡=[
{
姓名:“约翰”
},{
姓名:“斯坦”
},{
姓名:“凯文”
},{
姓名:“简”
},{
姓名:“劳拉·梅”
}
];
tab=tab.map(函数(e){returne e.name})
.join(“,”)
.替换(/、([^、]+)$/、'和$1');
document.getElementById(“text”).innerHTML=tab代码>
使用正则表达式可以简化:
tab = tab.map(function(e) { return e.name })
.join(', ')
.replace(/, ([^,]+)$/, ' and $1');
/,([^,]+)$/
匹配名称后面的最后一个逗号
以下是它的工作原理:
[^,]+
匹配多个没有逗号的字符
$
与文本结尾匹配
([^,]+)
周围的括号将姓氏作为一个分组,替换为替换字符串中的$1
使用此正则表达式,姓氏可以包含空格或其他字符,如代码段中所示
片段:
var选项卡=[
{
姓名:“约翰”
},{
姓名:“斯坦”
},{
姓名:“凯文”
},{
姓名:“简”
},{
姓名:“劳拉·梅”
}
];
tab=tab.map(函数(e){returne e.name})
.join(“,”)
.替换(/、([^、]+)$/、'和$1');
document.getElementById(“text”).innerHTML=tab代码>
使用slice(0,-1)
使用slice(0,-1)
为什么在OP的map
代码更少的情况下使用reduce
呢?为什么在OP的map
代码更少的情况下使用reduce
呢?