繁体   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