Javascript 在每个对象数组之间插入一个字符串,并为最后一个标记指定一个字符串

Javascript 在每个对象数组之间插入一个字符串,并为最后一个标记指定一个字符串,javascript,Javascript,我需要显示一个带有逗号和单词“and”的姓名列表作为最后一个标记(例如:John、Stan、Kevin、Jane和Laura)。实际上,我创建了一个函数,但我想改进它。提前感谢您的回复 var选项卡=[ { 姓名:“约翰” },{ 姓名:“斯坦” },{ 姓名:“凯文” },{ 姓名:“简” },{ 名字:“劳拉” } ]; tab=tab.map(函数(e){returne e.name}); tab=tab.join(','); tabIndex=tab.lastIndexOf(',');

我需要显示一个带有逗号和单词“and”的姓名列表作为最后一个标记(例如:John、Stan、Kevin、Jane和Laura)。实际上,我创建了一个函数,但我想改进它。提前感谢您的回复

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
呢?