簡體   English   中英

用Javascript中的另一個數組替換數組的一部分的最快方法是什么?

[英]What is the fastest way to replace a section of an array with another array in Javascript?

我正在與Dygraph合作,並實現了一個重新加載程序,該加載程序可以在用戶放大圖形時添加更高分辨率的數據。

為了保持原始文件的邊界,我保留了原始數據並以相應的縮放間隔插入新加載的數據,如下所示:

function spliceAndInject(my_graph_gadget, my_hi_res_data_dict) {
  ...

  for (i = 0, len = current_data_set.length; i < len; i += 1) {
    point = current_data_set[i];
    // NOTE: a point = [time_in_milliseconds, value_for_graph]
    timer = point[0];

    if (timer < lower_bound || timer > higher_bound) {
      new_data_set.push(point);
    } else if (is_injected === undefined) {
      is_injected = true;
      new_data_set = new_data_set.concat(hi_res_data_set);
    }
  }
  ...
}

我想知道是否可以更快地完成此操作,因為隨着我攜帶的數據越多,圖形渲染的速度會明顯變慢。

問題
用另一個數組替換數組的一部分的最快方法是什么?

謝謝!

如果您事先知道索引並想用數據修改數組,則使用本機splice方法可能是最好的方法-盡管要獲得最佳性能,您需要針對手動移動的手寫解決方案進行測試。

如果要創建一個新數組,請使用以下命令:

var len = current_data_set.length,
    new_data_set = new Array(len);
for (var i=0; i<len; i++)
  var point = current_data_set[i];
  if (point[0] < lower_bound)
    new_data_set[i] = point;
  else
    break;
for (var j=i, k=0, l=hi_res_data_set.length; k<l; k++)
  new_data_set[j++] = hi_res_data_set[k];
for (; i<len; i++)
  if (current_data_set[i][0] > higher_bound)
    break;
for (; i<len; i++)
  new_data_set[j++] = current_data_set[i];

我認為這比您的速度快,因為

  • 它不使用concat來創建第二個新數組
  • 它不會針對lower_boundhigher_bound測試所有點
  • 它不使用那個奇數is_injected變量(如果有的話,應該靜態地將其鍵入為布爾值),其唯一目的是跳過循環部分

暫無
暫無

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

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