【问题标题】:Search a large array in Javascript more efficiently?在 Javascript 中更有效地搜索大型数组?
【发布时间】:2018-10-03 14:30:21
【问题描述】:

我正在编写一个允许组织记录和数据的脚本。

但是现在的一个问题是我使用一个数组来存储大量信息,并且在我的脚本中的某个点,这个数组被搜索匹配的 id 并更新。当数组大小超过 200 个元素时,数据搜索开始变得很慢。

有什么方法可以更有效地搜索数组吗?

我目前正在使用 find.(function(a){return x == y};);

我的数组中的每个元素也是一个元组。

示例代码:

   onPipelineChanged: function(component, event, helper)
   {
    var titleid = event.getParam("titleid");
    var title = event.getParam("title");
    var maxSeats = event.getParam("maxSeats");
    var seatsInUse = event.getParam("seatsInUse");  
    var item = event.getParam("item"); //This is the item that was moved.
    var allGuestsList = component.get("v.allItems");

    //Searches guest list for matching guest of who got moved.
    var actualGuest = allGuestsList.find(function(moving){return moving.id == item.id;}); //***REALLY INEFFICIENT***

【问题讨论】:

  • 你确定这是你的减速吗?对于几百个对象,预计这将花费很少的时间。
  • 使用不同的数据结构。可能是一个Map,由 id 键控,或者是一个按 id 排序的数组。

标签: javascript arrays search optimization


【解决方案1】:

在长度为 200 的数组中查找对于任何计算机来说都不是硬操作,即使是非常古老的计算机。

findmapfilterwhilefor 运行速度很快。什么可能工作缓慢 - 如果您经常更改 html。所以优化DOM操作,尝试计算内存中的所有内容并在计算完所有数据后只更改一次html等

例如:100 000 长度数组的大量操作只需要 7-8 毫秒(0.007 秒)

var timestart = new Date().getTime()

var arr = Array.from({length: 100000}, Math.random)

var newArr = arr
  .filter(_ => _ < 0.5)
  .map(_ => { return {val: _ * 2}})
  .reverse()
  .join(',')
  .split(',')

var timeend = new Date().getTime()

console.log ('execution time (sec) ' + ((timeend - timestart) / 1000)) // for me 0.007 of sec

【讨论】:

  • 同意,尽管那是毫秒。 (微秒小一千倍。)
  • reverse().join(',').split(',') 应该完成什么?!
  • 我认为您正在寻找Array.from({length: 100000}, Math.random)。您的 .fill(Math.random()) 用相同的数字填充整个数组。
  • Scott Sauyet,Bergi,谢谢,我更新了答案。 Bergi - reverse().join(',').split(',') - 没什么,只是想演示一些可能需要一些时间的操作
猜你喜欢
  • 2015-03-26
  • 1970-01-01
  • 2012-03-04
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多