簡體   English   中英

在Javascript中重復數組的最快方法

[英]Fastest way to repeat an array in Javascript

我一直在嘗試找出一種基於重復給定次數元素來創建數組的快速方法。 出於我的目的,通常我要重復的元素是另一個數組,我會用它做成一個長的重復(二維)數組,所以我希望它快。 請注意,在每個示例中, c=[element]因為它自然地出現在我的代碼中。

我在這里找到了一些選擇。 最基本的是選項1:

function repeatSimple(c, n) {
  var arr = [];
  for (var i=0; i<n; i++) {
    arr = arr.concat(c);
  };
  return arr;
};

然后從這個問題(將數組連接到自身以便對其進行復制 ),gdbdmdb有另一個選擇:

function repeatApply(c, n) {
  return [].concat.apply([], Array.apply(0, Array(n)).map(function() { return c }));
};

我的想法是(a)我不太了解第二個選項,以至於不知道這是否是一個好的解決方案,並且(b)像第一個選項一樣,必須concat調用n次,這真是愚蠢。 所以我又想出了一個:

function repeatBinary(c, n) {
  var arr = [];
  var r = 0;
  while (n>0) {
    r = n%2;
    if (r>0) {
      arr = arr.concat(c);
    };
    n = (n-r)/2;
    if (n>0) {
      c = c.concat(c);
    };
  };
  return arr
};

這樣,我最多只需要調用concat 2log_2( n )次。

所以,我的問題是,最快的方法是什么? 是我在這里查看的選項之一,還是有其他東西可以將它們從水中吹走? 還是所有這些選項都以類似的速度工作,而實際上並沒有什么不同?

我認為即使使用concat功能,最快的方法也可以:

function repeatSimple(element, times)
{
    var result = [];
    for(var i=0;i<times;i++)
      result.push(element);
    return result;
}

而且,如果您不想使用push函數,則可以像這樣將值直接分配給數組中的項目

function repeatSimple(element, times)
{
    var result = Array(times);
    for(var i=0;i<times;i++)
      result[i] = element;
    return result;
}

另一個聰明的方法是連接一個數組並像這樣拆分它

function repeatSimple(element, times)
{
    (result = Array(times).join("," + element).split(',')).shift()
    return result;
}

但是最后一個函數返回一個字符串數組,您必須將每個元素轉換為所需的類型,但是無論如何,這些函數可能會幫助您

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM