我正在尝试连接条目列表:
var arry = ['Jane', 'John', 'Tim'];
您当然可以使用arry.join(', ')
,它会产生:
'Jane, John, Tim'
但如果我想要:
'Jane, John, and Tim'
我知道我可以使用 for 循环进行迭代并在我处于最后一个索引时进行跟踪,然后使用一些if
逻辑来处理这个问题,但我想知道是否有更简单的方法?
我正在尝试连接条目列表:
var arry = ['Jane', 'John', 'Tim'];
您当然可以使用arry.join(', ')
,它会产生:
'Jane, John, Tim'
但如果我想要:
'Jane, John, and Tim'
我知道我可以使用 for 循环进行迭代并在我处于最后一个索引时进行跟踪,然后使用一些if
逻辑来处理这个问题,但我想知道是否有更简单的方法?
您可以使用
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)
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"
虽然您可以尝试使用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;
}
然后我会在任何我想要的地方使用它。
使用 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>