拥有标签['tag1', 'tag2', 'tag3']
的列表(数组)我希望生成一个好的标题,如:Content tagged tag1, tag2 and tag3
。
目前我有:
"Content tagged " + tags_titles.join(" and ");
结果:
Content tagged tag1 and tag2 and tag3
我知道这是一个简单的问题,但我很好奇是否有一个很好的解决方案。
答案 0 :(得分:7)
你可以获得最后两个元素并将它们与' and '
连接起来,并将它作为最后一个元素放回到数组中,然后将所有元素与', '
连接起来以获得一个很好的字符串。
方法
Array#concat
,加入两个数组并返回一个新数组
Array#splice
,获取阵列的最后两个元素
Array#join
,使用给定的spacer连接数组。
此提案适用于任何长度的数组,即使只有一个或两个元素。
function nice(array) {
return array.concat(array.splice(-2, 2).join(' and ')).join(', ');
}
console.log("Content tagged " + nice(['tag1']));
console.log("Content tagged " + nice(['tag1', 'tag2']));
console.log("Content tagged " + nice(['tag1', 'tag2', 'tag3']));

答案 1 :(得分:2)
试试这个
var g = ['tag1', 'tag2', 'tag3'];
var title = g.slice(0, g.length-1).join(',').concat(' and ').concat(g[g.length-1]);
答案 2 :(得分:2)
使用Array.prototype.slice
进行一些切片和切块:
function naturalLanguageJoin(arr){
if(!arr)
return '';
if(arr.length<2)
return (arr.length>0) ? arr[0] : '';
return arr.slice(0,arr.length-1).join(", ") + " and " + arr[arr.length-1];
}
console.log(naturalLanguageJoin(['tag1', 'tag2', 'tag3']));
console.log(naturalLanguageJoin(['tag1', 'tag2']));
console.log(naturalLanguageJoin(['tag1']));
console.log(naturalLanguageJoin([]));
console.log(naturalLanguageJoin(null));
答案 3 :(得分:2)
可以将数组视为堆栈,这样您就可以弹出最后一个元素,然后编写此
var last = tags_titles.pop();
last = tags_titles.length ? ` and ${last}` : last;
`Content tagged ${tags_titles.join(", ")} ${last}`
代码使用ES6字符串模板,我通常发现它比在代码中进行字符串连接更具可读性。它还利用了pop方法基本上对操作执行的事实。获取数组的lasst元素并改变数组。这消除了明确地进行突变的需要(使用切片)
答案 4 :(得分:2)
这样的事情将是我的方法
function arrayFormat(arr) {
var output = arr.splice(0, arr.length - 1).join(", ");
output += " and " + arr[0];
return output;
}
console.log(arrayFormat(["a", "b", "c"]));
&#13;
答案 5 :(得分:2)
从我看来,这是一个简单的方法
var tags = ['tag1', 'tag2', 'tag3'];
console.log("Content tagged " + tags.slice(0, -1).join(', ')+' and '+tags.slice(-1));
希望它可以帮到你:) JsFiddle
答案 6 :(得分:1)
试试这个,
var arr = ['tag1', 'tag2', 'tag3'];
var lastStr = arr.pop();
var str = "Content tagged " + arr.join(", ") + " and " + lastStr;