【发布时间】:2012-09-05 19:40:26
【问题描述】:
在 JavaScript 中使用数组映射范围最有效的是什么?
我有这个:
var def = [70,200,1000];
还有一组可能的数字,比如说:
var n = [23,45,74,120,240,800,1204,2000];
现在,如何从 n 中提取与 def 中的值匹配的最接近的值?
在上面的例子中,我会得到[74,240,800]。我希望我说清楚...
【问题讨论】:
-
如果
n已排序,您需要对def中的每个条目进行二进制搜索,并在最后一次访问时停止,如果不是实际目标。如果没有重复的选择,则从n中删除条目。这将是o(#def . log #n),如果两者都通过n进行排序,则可以将其设为o(#n),但如果def较小且n较高,则情况会更糟。 -
如果我们可以假设
n将是一个排序数组,那么逻辑将类似于:iterate through n until a value greater than this is found. compare that value with the value from the previous index to determine which is closer to this -
想一想:如果
def被排序了,我们真的需要每次都循环遍历n吗? -
如果我们假设两个数组都已排序,则不会。否则,我相信您需要为 def 中的每个值遍历 n。
-
这是 Python 中的解决方案:
[min(n, key=lambda p: abs(d-p)) for d in def_]。抱歉,我无法抗拒。
标签: javascript arrays math map match