Javascript:很好的人类可读的列表连接

时间:2017-06-08 08:58:42

标签: javascript

拥有标签['tag1', 'tag2', 'tag3']的列表(数组)我希望生成一个好的标题,如:Content tagged tag1, tag2 and tag3

目前我有:

"Content tagged " + tags_titles.join(" and ");

结果: Content tagged tag1 and tag2 and tag3

我知道这是一个简单的问题,但我很好奇是否有一个很好的解决方案。

7 个答案:

答案 0 :(得分:7)

你可以获得最后两个元素并将它们与' and '连接起来,并将它作为最后一个元素放回到数组中,然后将所有元素与', '连接起来以获得一个很好的字符串。

方法

此提案适用于任何长度的数组,即使只有一个或两个元素。



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)

这样的事情将是我的方法

&#13;
&#13;
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;
&#13;
&#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;