我该如何在Javascript中将一个数组,例如["Susy", "John", "Mary"]
转换为"Susy, John, and Mary"
?我无法摆脱Ruby的to_sentence方法。
我该如何在Javascript中将一个数组,例如["Susy", "John", "Mary"]
转换为"Susy, John, and Mary"
?我无法摆脱Ruby的to_sentence方法。
使用最新的JavaScript(Chrome 72+):
new Intl.ListFormat().format(["Susy", "John", "Mary"]);
这将导致:
"Susy, John, and Mary"
将除最后一项之外的所有项目加在一起,然后再添加上最后一项:
var s = arr.slice(0, arr.length - 1).join(', ') + ", and " + arr.slice(-1);
+ ", and " +
。 - Guffa另一种选择是使用Array.prototype.reduce
,代码如下:
var arr = [1,2,3];
arr.reduce(
function(prev, curr, i){
return prev + curr + ((i===arr.length-2) ? ' and ' : ', ')
}, '')
.slice(0, -2);
生成"1, 2 and 3"
。
toSentence = function(arr){ return arr.join(", ").replace(/,\s([^,]+)$/, ' and $1');};
toSentence(['dogs', 'cats']); // => dogs and cats
toSentence(['dogs', 'cats', 'snakes']); // => dogs, cats and snakes
这里有几种特殊情况:
我认为这符合所有这些用例:
function joinSentence( array, oxford_comma ){
if( array.length > 1 ){
var lastWord = " and " + array.pop();
if( oxford_comma && array.length > 1 ){
lastWord = "," + lastWord;
}
}else{
var lastWord = "";
}
return array.join(", ") + lastWord;
}
(function(a) {
var b = (a||(a=[])).pop();
return (b ? a.length ? [a.join(", "),b] : [b] : a).join(" and ");
})(["Susy", "John", "Mary"]);
或者只需在数组的原型中定义类似 Ruby 语句的方法:
Array.prototype.sentence = function(comma,and) {
var b = this.pop();
return (b ? this.length ? [this.join(comma||", "),b] : [b] : this).join(and||" and ");
};
["Susy", "John", "Mary"].sentence();
//"Susy, John and Mary"
["Susy", "John", "Mary"].sentence(" and ", " as well as ");
//"Susy and John as well as Mary"
["Susy", "John", "Mary", "Helmut"].sentence();
//"Susy, John, Mary and Helmut"
var source = ["Susy", "John", "Mary"];
source.push( 'and ' +source.pop());
console.log(source.join(', '))// Susy, John, and Mary
请尝试以下操作:
var array = ['susy', 'john', 'mary'];
var last = array.pop();
var string = array.join(', ') + " and " + last;
var array = ['susy', 'john', 'mary'];
array[array.length-1] = 'and '+array[array.length-1];
//string is "susy, john, and mary"
var string = array.join(', ');
一个非常简单的方法:
function toSentence(array) {
const lastWord = (array.length > 1) ? ` and ${array.pop()}` : ''
return array.join(', ') + lastWord
}
["Susy", "John", "Mary"].join(',').split(/,M/).join(' and M');
- jAndy