14

Javascriptなどで配列を変換するにはどうすればよい["Susy", "John", "Mary"]ですか? "Susy, John, and Mary"Rubyのto_sentenceメソッドが頭から離れません。

4

10 に答える 10

12

最後のアイテムを除くすべてのアイテムを結合し、それを追加します。

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

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

于 2013-02-08T00:59:25.840 に答える
11

を使用する別のオプションは次の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"ます。

于 2014-02-20T14:24:31.063 に答える
6

これには、いくつかの追加のケースがあります。

  1. 「and」の前にコンマを置きますか (Oxford Comma)
  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;
}
于 2014-04-12T05:56:20.683 に答える
3

そして別の解決策:

(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"
于 2013-02-08T01:22:54.653 に答える
2

最後を変更してから参加する

var source = ["Susy", "John", "Mary"];
source.push( 'and ' +source.pop());
console.log(source.join(', '))// Susy, John, and Mary
于 2013-02-08T01:01:17.457 に答える
2

それを試してください:

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

私は試しませんでしたが、あなたはアイデアを得る必要があります

于 2013-02-08T01:01:24.273 に答える
1

.join() を使用して、最後の値の前に「and」を追加できます

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

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

//string is "susy, john, and mary"
var string = array.join(', ');
于 2013-02-08T00:56:28.690 に答える
-2
var arr = ["Susy", "John", "Mary"];
var str = arr.join(", ");
于 2013-02-08T00:57:24.377 に答える