[英]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_bound
和higher_bound
測試所有點 is_injected
變量(如果有的話,應該靜態地將其鍵入為布爾值),其唯一目的是跳過循環部分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.