2013-02-08 82 views
7

如何在Javascript中將數組(例如["Susy", "John", "Mary"])轉換爲"Susy, John, and Mary"?我無法將Ruby的to_sentence方法從我的腦海中解放出來。Javascript Array to Sentence

+2

沒有那麼嚴重,但..'[ 「與Susy」, 「約翰」, 「瑪麗」。加入( ' ')。分裂(/ M /)。加入(' 和M' );' – jAndy

回答

6

加入所有項目除了最後一個,然後加上一句:

var s = arr.slice(0, arr.length - 1).join(', ') + ", and " + arr.slice(-1); 

演示:http://jsfiddle.net/JYKcK/1/

+0

只有一個註釋 - 美國人在「和」之前加逗號。 OP已經做到了。 – Popnoodles

+0

@popnoodles:啊,那麼你只需要使用「+」和「+」。 – Guffa

+0

我用這種方法去了。 – Corey

1

可以使用。加入(),並用預先準備的最後一個值 「和」

var array = ['susy', 'john', 'mary']; 

array[array.length-1] = 'and '+array[array.length-1]; 

//string is "susy, john, and mary" 
var string = array.join(', '); 
+0

我知道這種方法,我想要「和」最後一個項目之前。 – Corey

+0

我的壞,我沒有看到「和」...讓我重新因素 – joeltine

-1
var arr = ["Susy", "John", "Mary"]; 
var str = arr.join(", "); 
+1

這產生'「蘇西,約翰,瑪麗」',這不是理想的結果。 – pjmorse

2

修改最後再加入

var source = ["Susy", "John", "Mary"]; 
source.push('and ' +source.pop()); 
console.log(source.join(', '))// Susy, John, and Mary 
+0

確定這是更性感:)但是,在語法之前添加一個逗號是否正確? – mika

+0

不適用於1和2元素:[「Susy」] =>「和Susy」。 [「蘇西」,「約翰」] =>「蘇西和約翰」 –

2

試一下:

var array = ['susy', 'john', 'mary']; 
var last = array.pop(); 
var string = array.join(', ') + " and " + last; 

MORE。我不嘗試,但你應該明白我的意思

1

而另一種解決方案:

(function(a) { 
    var b = (a||(a=[])).pop(); 
    return (b ? a.length ? [a.join(", "),b] : [b] : a).join(" and "); 
})(["Susy", "John", "Mary"]); 

或只是定義在你的紅寶石般的句子方法陣列的原型:

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" 
3

另一種選擇,使用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"

2

有一些額外的情況下,在這一個:

  1. 難道我們希望有「和」(牛津逗號)之前一個逗號
  2. 無論哪種方式,我們不希望一個逗號,如果只有2個元素
  3. 如果只有1元,我們只想說一句話返回

我認爲這符合所有這些用例:

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; 
} 
+0

這應該是正確的答案! – mech

2
toSentence = function(arr){ return arr.join(", ").replace(/,\s([^,]+)$/, ' and $1');}; 

toSentence(['dogs', 'cats']);   // => dogs and cats 

toSentence(['dogs', 'cats', 'snakes']); // => dogs, cats and snakes