【发布时间】:2019-01-30 22:30:11
【问题描述】:
我有两个数组:
arr1 = [0,1,1,0]
arr2 = [a,b,c,d]
我想找到 arr2[ i ] 的值和对应的索引,其中 i 使得 arr1[ i ] != 0 而不遍历 arr2 中的每个位置。什么有效的技术可以做以下事情:
arr2.forEach( ( 'element with index such that arr1[index] != 0') => {} );
** EDIT ** 这个问题的最初发布并不清楚是否需要记录满足条件的元素的索引。
【问题讨论】:
-
您必须以一种或另一种方式遍历数组以找到非零条目。
-
最有效的方法是简单的
for-loop overarr1...for(...) if (arr1[i] === 0) doSomething(arr2[i]) -
如果您迭代的集合(相对)不变,那么您可以按条件排序,然后对要查找的内容进行二进制搜索。
-
@Tony 排序是
O(n log n),然后是二分查找O(log n),而循环是O(n)。我并不是说你的建议是错误的,只是需要非常特定的情况才能最有效。 -
我不知道实际设置的 interwebjill 将使用什么,也不知道它在应用程序的生命周期中如何变化。这就是为什么我提到它是否不变。 log n解可能是最优解,不知道信息不够
标签: javascript arrays