2013-02-08 16 views
7

["Susy", "John", "Mary"]などの配列をJavascriptで"Susy, John, and Mary"にするにはどうすればよいですか? Rubyのto_sentenceメソッドを私の頭から出すことはできません。Javascript配列を文章

+2

、しかし... '[ "スージー"、 "ジョン"、 "メアリー"]。参加( ' ')。スプリット(/、M /)。参加(' とM' ); ' – jAndy

答えて

6

と最後の値を付加することができますが、最後の1以外のすべての項目に参加し、そのを追加します。

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

デモ:http://jsfiddle.net/JYKcK/1/

+0

ちょうど1つのメモ - アメリカ人は "と"の前にコンマを入れます。 OPはこれを行った。 – Popnoodles

+0

@popnoodles:ああ、ちょうど '+"と "+"を使います。 – Guffa

+0

私はこの方法を使いました。 – Corey

1

あなたは(.join使用)と "と"

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

これは、 "Susy、ジョン、メアリー" 'を生成します。これは望ましい結果ではありません。 – pjmorse

2

最後に変更してから登録する

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

okこれはセクシーです:)しかし文法的にコンマを前に付け加えるのは正しいですか? – mika

+0

["Susy"] => "and Susy"の1要素と2要素では機能しません。 ["Susy"、 "John"] => "Susy、John" –

2

はそれを試してみてください。

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

私はトンがしようdidnのが、あなたのアイデア

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. いずれかの方法で、我々はカンマであればしたくないを持っていたいです

    :唯一の1要素がある場合にのみ、2要素
  3. は、私は、これは、それらの使用例すべてに合うと思う私達はちょうどその単語が

を返したい、があります

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