将数组转换为逗号分隔语法正确的句子

Ale*_*her 12 javascript arrays string

如果我在Javascript中有一个看起来像的数组

searchComponents = ['element1', 'element2', 'element3'];
Run Code Online (Sandbox Code Playgroud)

将它变成如下句子的必要逻辑是什么:

"element1,element2和element3"

同样,如果只有两个元素,它应该如下:

"element1和element2"

等等等等.我被卡住了.

Dav*_*mas 19

简单的解决方案:

function arrayToSentence (arr) {
    var last = arr.pop();
    return arr.join(', ') + ' and ' + last;
}

console.log(arrayToSentence(['one','two','three']));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

还有一个稍微复杂/荒谬的解决方案(因为谁不喜欢傻,偶尔......):

function arrayToSentence (arr) {
    var len = arr.length;
    return arr.reduce(function(a,b,c){
        return a + (c - 1 === length ? ', ' : ' and ') + b;
    });
}

console.log(arrayToSentence(['one','two','three']));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

参考文献:

  • 一定要检查数组是否是单个值!或者你可能最终得到"和一个". (6认同)

the*_*fer 17

function toSentence(arr) {
  return arr.slice(0, -2).join(', ') + 
    (arr.slice(0, -2).length ? ', ' : '') + 
    arr.slice(-2).join(' and ');
}
Run Code Online (Sandbox Code Playgroud)

用法

toSentence([1])
Run Code Online (Sandbox Code Playgroud)

1

toSentence([1, 2])
Run Code Online (Sandbox Code Playgroud)

1和2

toSentence([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

1,2和3

toSentence([1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

1,2,3,4,5和6

  • @rubie 不会导致 `1, 和 2` 吗? (2认同)

Rim*_*ian 5

这是单行:

const arrayToSentence = (a) => [a.slice(0, -1).join(', '), a.pop()].filter(w => w !== '').join(' and ');

console.log(arrayToSentence(['foo', 'bar', 'baz']));
console.log(arrayToSentence(['foo', 'bar']));
console.log(arrayToSentence(['foo']));
console.log(arrayToSentence([]));
Run Code Online (Sandbox Code Playgroud)


小智 5

迟到的答案,但这是我的尝试。相对简单、不可变的参数,适用于 0-N 项。

const toListSentence = (arr) => arr.length < 3 ?
  arr.join(' and ') :
  `${arr.slice(0, -1).join(', ')}, and ${arr[arr.length - 1]}`;

console.log(toListSentence([]));
console.log(toListSentence(['apple']));
console.log(toListSentence(['apple', 'banana']));
console.log(toListSentence(['apple', 'banana', 'peach']));
Run Code Online (Sandbox Code Playgroud)