1

この文脈で言う:

String.prototype.times = function(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
}

"hello!".times(3); //"hello!hello!hello!";
"please...".times(6); //"please...please...please...please...please...please..."

新しいステートメントに3回追加するにはどうすればよいですか?また、returnステートメントを理解するのに少し混乱しています。私がこれを正しく理解しているかどうか教えてください:

(if count < 1){
    return ''
} else {
    return new Array(count + 1).join(this) //This I don't understand.

ありがとうございました。

4

5 に答える 5

6

これにより、指定された長さ、たとえば7の新しい配列が作成されます。次に、これらすべての空のアイテムを文字列で結合すると、その文字列が6回繰り返されます。

通常は:

[1,2,3].join("|") === "1|2|3"

次に、長さ4の配列を使用します。

new Array(4).join("|") === "|||"

thisメソッド内はString.prototype、関数がメソッドとして呼び出された文字列オブジェクトを参照します。

 "hello".bold(); //this would refer to a string object containing "hello" inside bold()
于 2012-08-06T21:09:18.387 に答える
3

this、このコンテキストでは、影響を受ける文字列を指します。したがって、を呼び出す"hello".times(5)と、thisを参照し"hello"ます。

count+1この関数は、要素を含む配列を作成し、countそれらの間に効果的に「ギャップ」を作成することによって機能します。this次に、ピースがストリングと一緒に接着され、それが何度thisも繰り返されcountます。

もちろん、1回未満繰り返すように指示されている場合、結果は空になります。チェックは、無効な配列サイズのcount < 1エラーを回避することです。

于 2012-08-06T21:10:50.200 に答える
1

.join()配列のセルを結合し、文字列になります。例えば:

var arr = [ 'one', 'two', 'three' ];

var str = arr.join(', ');

// str is now "one, two, three"

だから、あなたのtimes関数では、あなたは言っていnew Array(count + 1)ます。したがって、countが3の場合、実際には4つのセルのの配列を作成しています。次に、それらの空のセルをthis(文字列)で結合します。

于 2012-08-06T21:12:27.097 に答える
0

このメソッドは、指定された長さに1を加えた新しい配列を作成します。次に例を示します。

"hello".times(3);

次の配列を作成します。

[undefined × 4]

次に、これらの配列要素のそれぞれが。で結合され.join("hello")ます。これは基本的にこれに変換されます:

"" /* undefined array element */ + "hello" /* join string */ + "" + "hello" ...


そして、はい、あなたは三項演算子を理解しているようです。

于 2012-08-06T21:12:00.650 に答える
0
String.prototype.repeat = function(times) {
    return new Array(times+1).join(this);    
}

"go ".repeat(3) + "Giants!"; //"go go go Giants!"

基本配列は未定義のメンバー値のみで構成されているのに対し、焦点はセパレーター引数にあります。上記の例は、手書きで次のように書き直すことができます。

[undefined,undefined,undefined,undefined].join("go ") + "Giants!";

結合演算子を使用すると、各配列メンバーは連結される前に文字列(この場合は空の文字列)に変換されます。

ソース:https ://javascriptweblog.wordpress.com/2010/11/08/javascripts-dream-team-in-praise-of-split-and-join/

于 2017-02-22T16:11:57.620 に答える