更有效地在Javascript中搜索大型数组?

时间:2018-10-03 14:30:22

标签: javascript arrays search optimization

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

但是,现在的问题是我使用一个数组来存储大量信息,并且在我的脚本中的某个时刻,该数组被搜索以查找匹配的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***

2 个答案:

答案 0 :(得分:-1)

您可以尝试搜索算法,例如二进制搜索。 binary search

答案 1 :(得分:-2)

在长度为200的阵列中查找对于任何计算机都不会是困难的操作,即使是很老的计算机。

findmapfilterwhilefor可以快速运行。可能会变慢的是-如果您经常更改html。因此,请优化DOM操作,尝试计算内存中的所有内容,并在计算完所有数据后仅更改html等一次

例如:使用100000长度数组的许多操作仅花费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