【问题标题】:Quicker way to access element in a large array?访问大型数组中元素的更快方法?
【发布时间】:2021-05-26 10:12:34
【问题描述】:

当我这样做时,我的程序的运行时间需要一段时间:array[index] 我相信这是因为“数组”是一个非常大的数组,加载数组需要一段时间。有没有办法通过数组作为加载,一旦找到“索引”,它就会停止加载?

我的理论是,您必须等待整个数组加载完毕才能通过它,但我不确定是否还有其他方法(我也考虑过映射和指针,但这似乎是同一个问题)

关于如何使用大型数组使我的运行时更快有什么想法吗?

编辑:我的问题的代码:

function myFunction(index) {
  array = ["702-123-456", "702-234-567",...] 
  return array[index]; 
}

那里有 2000 个电话号码。一旦找到array[index](索引可以随着索引被传递给函数而改变),就会返回该数字。

【问题讨论】:

  • 好吧,我认为您无法控制将数组加载到 RAM 中。这需要操作系统注意,一旦完成,只有您可以访问阵列。也许将数组从逻辑上分解为多个可能会对您有所帮助。或者你也可以重新考虑使用的数据结构。
  • 我明白了。如果我对数组进行切片,您是否认为这是同样的问题,因为我需要等待数组加载然后切片?虽然我认为问题在于我必须等待数组加载,这会导致运行时间过长,但我不确定这是否是我的问题
  • 有许多不同的方法来搜索/排序一个数组。在 google 上搜索“javascript 搜索排序算法”并测试最适合您的方法。如果您不提供数据结构的外观,我们很难提供帮助。
  • @Spangle 如果我的运行时间很大的原因是因为在我执行 array[index] 时正在加载“array”?或者是因为它正在访问使它变慢的索引?抱歉,我对好的性能不太熟悉。如果您认为这是因为访问索引使其变慢,那么是的,我应该以某种方式操纵数据。但如果是因为正在加载数组,我不确定。
  • 我建议做一个测试,看看加载数组需要多长时间。得到它需要的时间。之后,再做一次测试,看看在数组中找到项目需要多少时间。数据来自api吗? javascript也是单线程的,需要考虑。即您不会同时搜索数组并加载它。

标签: javascript arrays runtime


【解决方案1】:

我已经测试了通过 array 循环的不同方法,并且似乎 filter 方法是最高效的:

const array = [ 1, 2, 3];

for(i = 0; i < array.length; i++){
  console.log(array[i]);  // 0.719ms
}

array.forEach(item => console.log(item)); // 0.236ms

array.map(item => console.log(item)); // 0.066ms

array.filter(item => console.log(item)); // 0.056ms

您也可以使用sort() 方法,它的速度更快,具体取决于您的用例。

array.sort(a => console.log(a)); // 0.046ms

【讨论】:

  • 哇,时间的进步真是太棒了!过滤是让数组先加载,然后再通过它吗?一旦找到索引,您是否会碰巧知道一种打破数组的方法?我认为如果可能的话,再加上使用过滤器,会大大提高运行时间。
  • 我真的不知道,但如果我发现了,我会分享它。你想找到哪个索引然后停止循环?
  • 在循环遍历array@webdesignnoob 时您到底想做什么?你在尝试什么样的操纵?
  • @webdesignnoob 你也可以使用sort(),这样更快,但我不知道它是否对你的用例有用。我会更新我的答案以包括在内。
  • 我已经用我的代码更新了我的问题!我会尝试你提到的方法看看。
猜你喜欢
  • 2023-03-14
  • 2015-08-09
  • 1970-01-01
  • 2014-06-15
  • 2016-12-10
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多