国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

JavaScript中如何建構(gòu)/連接字串?
P粉513316221
P粉513316221 2023-08-27 19:01:23
0
2
639
<p>JavaScript 支援替換/內(nèi)插嗎? </p> <h3>概述</h3> <hr /> <p>我正在開發(fā)一個(gè) JavaScript 項(xiàng)目,隨著它變得越來越大,保持字串良好的狀態(tài)變得越來越困難。我想知道在 JavaScript 中建構(gòu)或建構(gòu)字串的最簡(jiǎn)單和最傳統(tǒng)的方法是什麼。 </p> <p>到目前為止我的經(jīng)驗(yàn):</p> <blockquote> <p>隨著專案變得更加複雜,字串連接開始看起來很醜陋並且變得更難維護(hù)。 </p> </blockquote> <p>此時(shí)最重要的是簡(jiǎn)潔性和可讀性,考慮一堆移動(dòng)部件,而不僅僅是 2-3 個(gè)變數(shù)。 </p> <p>同樣重要的是,它目前已得到主要瀏覽器的支援(即至少支援 ES5)。 </p> <p>我知道 JavaScript 連結(jié)簡(jiǎn)寫:</p> <pre class="brush:php;toolbar:false;">var x = 'Hello'; var y = 'world'; console.log(x ', ' y);</pre> <p>還有 String.concat 函數(shù)。 </p> <p>我正在尋找更簡(jiǎn)潔的東西。 </p> <p>Ruby 和 Swift 以一種有趣的方式做到了這一點(diǎn)。 </p> <p><strong>紅寶石</strong></p> <pre class="brush:php;toolbar:false;">var x = 'Hello' var y = 'world' print "#{x}, #{y}"</pre> <p><strong>斯威夫特</strong></p> <pre class="brush:php;toolbar:false;">var x = "Hello" var y = "world" println("(x), (y)")</pre> <p>我想 JavaScript 中可能有類似的東西,也許類似 sprintf.js。 </p> <h3>問題</h3> <hr /> <p>可以在沒有第三方函式庫(kù)的情況下完成此操作嗎?如果沒有,我可以用什麼? </p>
P粉513316221
P粉513316221

全部回覆(2)
P粉244730625

令我失望的是,其他答案中沒有人將「最佳方式」解釋為「最快方式」...

我從這裡提取了兩個(gè)範(fàn)例,並添加了str。 join()str.reduce() 來自上面 nishanths 的回答。以下是我在 Linux 上的 Firefox 77.0.1 上的結(jié)果。


注意:我在測(cè)試這些時(shí)發(fā)現(xiàn),如果我將str = str.concat()str = 直接放在之前或之後彼此之間,第二個(gè)總是表現(xiàn)得更好一些...所以我單獨(dú)運(yùn)行這些測(cè)試並評(píng)論其他測(cè)試的結(jié)果...

即使如此,如果我重新運(yùn)行它們,它們的速度也會(huì)很大變化,所以我每個(gè)都測(cè)量了 3 次。

一次 1 個(gè)字元:

  • str = str.concat()841、439、956 毫秒 / 1e7 concat() 的
  • ............str =949、1130、664 毫秒 / 1e7 ='s
  • .......[].join(): [] 中有 3350, 2911, 3522 ms / 1e7 個(gè)字元
  • #......[].reduce()[] 中的 3954、4228、4547 毫秒 / 1e7 個(gè)字元

#一次 26 個(gè)字串:

  • str = str.concat()444、744、479 毫秒 / 1e7 concat() 的
  • ............str =1037, 473, 875 毫秒 / 1e7 ='s
  • ........[].join(): 2693, 3394, 3457 ms / 1e7 字串在 []
  • #......[].reduce()[] 中的 2782、2770、4520 ms / 1e7 字串

#所以,無論是一次附加1個(gè)字元還是一次附加26個(gè)字串:

  • 明顯的獲勝者:基本上是 str = str.concat()str = 之間的平手
  • 明顯失敗者:[].reduce(),然後是 [].join()

我的程式碼,易於在瀏覽器控制臺(tái)中運(yùn)行:

{
  console.clear();

  let concatMe = 'a';
  //let concatMe = 'abcdefghijklmnopqrstuvwxyz';

  //[].join()
  {
    s = performance.now();
    let str = '', sArr = [];
    for (let i = 1e7; i > 0; --i) {
      sArr[i] = concatMe;
    }
    str = sArr.join('');
    e = performance.now();
    console.log(e - s);
    console.log('[].join(): ' + str);
  }

  //str +=
  {
    s = performance.now();
    let str = '';
    for (let i = 1e7; i > 0; --i) {
      str += concatMe;
    }
    e = performance.now();
    console.log(e - s);
    console.log('str +=: ' + str);
  }

  //[].reduce()
  {
    s = performance.now();
    let str = '', sArr = [];
    for (let i = 1e7; i > 0; --i) {
      sArr[i] = concatMe;
    }
    str = sArr.reduce(function(pre, next) {
      return pre + next;
    });
    e = performance.now();
    console.log(e - s);
    console.log('[].reduce(): ' + str);
  }

  //str = str.concat()
  {
    s = performance.now();
    let str = '';
    for (let i = 1e7; i > 0; --i) {
      str = str.concat(concatMe);
    }
    e = performance.now();
    console.log(e - s);
    console.log('str = str.concat(): ' + str);
  }

  'Done';
}
P粉412533525

使用ES6,你可以使用

ES5 及以下版本:

  • 使用 運(yùn)算子

    var username = 'craig';
    var joined = 'hello ' + username;
  • 字串的 concat (..)

    var username = 'craig';
    var joined = 'hello '.concat(username);

或者,使用陣列方法:

  • join( ..)

    var username = 'craig';
    var joined = ['hello', username].join(' ');
  • 或更奇特,reduce(..) 與上述任何一項(xiàng)組合:

    var a = ['hello', 'world', 'and', 'the', 'milky', 'way'];
    var b = a.reduce(function(pre, next) {
      return pre + ' ' + next;
    });
    console.log(b); // hello world and the milky way
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板