luk*_*nis 23 javascript arrays string
我发现Array.prototype.join()在从数组构造字符串时非常有用的方法,比如
"one two three".split(' ').join(', ');
Run Code Online (Sandbox Code Playgroud)
但是我经常要生成这样的字符串:
"one, two and three"
Run Code Online (Sandbox Code Playgroud)
我使用的方法是这样的:
var parts = "one two three".split(' ');
parts.slice(0, parts.length-1).join(', ') + ' and ' + parts.slice(-1)
Run Code Online (Sandbox Code Playgroud)
这会产生我想要的东西,但是我应该把它放到一个单独的函数中.
我喜欢一个衬里,并相信在JS中应该有更优雅的单行程来完成这项任务.有人可以给我一个吗?
编辑
请不要评论编写不可读代码是一种不好的做法.我要一个!:)我从一个衬里学到了很多关于语言结构的知识,所以我看到了一种可能性.没有冒犯的意思.
最后的编辑 我很欣赏Pavlo的答案,因为它真实地展示了一个衬垫能够轻松地成为一个漂亮的可读代码.因为我要求一个班轮,所以根据我的问题,h2ooooooo获得最高分.
Pav*_*vlo 55
我对惊人的解决方案的数量和没有人使用的事实感到惊讶pop():
function splitJoin(source) {
var array = source.split(' ');
var lastItem = array.pop();
if (array.length === 0) return lastItem;
return array.join(', ') + ' and ' + lastItem;
}
splitJoin('one two three'); // 'one, two and three'
splitJoin('one two'); // 'one and two'
splitJoin('one'); // 'one'
Run Code Online (Sandbox Code Playgroud)
编辑:修改为适用于任何字符串.
h2o*_*ooo 18
它仍然是一个功能,但为什么不使用原型呢?
Array.prototype.joinNice = function() {
return this.slice(0, this.length-1).join(', ') + ' and ' + this.slice(-1);
}
"one two three".split(' ').joinNice();
//one, two and three
Run Code Online (Sandbox Code Playgroud)
Cya*_*ish 10
我很惊讶没有人指出大多数这些答案都无法正常使用数组中的零个或一个元素.这是一个简单的解决方案,适用于0+元素:
function prettyJoin(array) {
return array.length > 1
? array.slice(0, -1).join(", ") + " and " + array.slice(-1)
: array + "";
}
prettyJoin([]); // ""
prettyJoin("one".split(" ")); // "one"
prettyJoin("one two".split(" ")); // "one and two"
prettyJoin("one two three".split(" ")); // "one, two and three"
Run Code Online (Sandbox Code Playgroud)