0

我正在尝试连接条目列表:

var arry = ['Jane', 'John', 'Tim'];

您当然可以使用arry.join(', '),它会产生:

'Jane, John, Tim'

但如果我想要:

'Jane, John, and Tim'

我知道我可以使用 for 循环进行迭代并在我处于最后一个索引时进行跟踪,然后使用一些if逻辑来处理这个问题,但我想知道是否有更简单的方法?

4

4 回答 4

4

您可以使用

arry.slice(0,-1).join(', ')+', and '+arry.slice(-1)

如果您希望arry少于 3 个元素,则应测试长度:

arry.length<3 ? arry.join(', ') : arry.slice(0,-1).join(', ')+', and '+arry.slice(-1)
于 2013-11-10T16:30:18.043 回答
1

Try using Array.slice:

var a = ['Jane','John','Tim'];
a.slice(0,a.length-1).join(', ') + ', and ' + a[a.length-1]
// --> "Jane, John, and Tim"
于 2013-11-10T16:33:35.337 回答
1

虽然您可以尝试使用slice,但最终会得到不希望的效果(例如,"John, and Tim"如果您只有两个条目)。

我只是给自己一个功能来做很长的路要走:

function oxfordCommaList(arry) {
    var rv;
    var last = arry[arry.length - 1];

    switch (arry.length) {
        case 0:
            rv = "";
            break;

        case 1:
            rv = last;
            break;

        case 2:
            rv = arry[0] + " and " + last;
            break;

        default:
            rv = arry.slice(0, -1).join(", ") + ", and " + last;
            break;
    }

    return rv;
}

实例| 资源

然后我会在任何我想要的地方使用它。

于 2013-11-10T16:37:19.677 回答
0

使用 angularjs 就像

$scope.arry = ["Jane", "John", "Tim", "Bob"];
$scope.plural = {0: 'Nobody is viewing.',
                 1: '{{person1}} is viewing.',
                 2: '{{person1}} and {{person2}} are viewing.',
                 other: '{{person1}}, {{person2}} and {} other people are viewing.'
}

和html:

<p x-count="arry" x-when="plural" x-offset="2"></p>

导致

<p x-count="arry" x-when="plural" x-offset="2">Jane, Jhon, and 2 other are viewing.</p>

演示:http ://plnkr.co/edit/?p=preview

于 2013-11-10T16:47:04.913 回答