【发布时间】:2019-05-24 17:22:01
【问题描述】:
我写了以下用于规范化向量的“单线”(此处由通常的数组表示),这意味着将每个条目除以向量的欧几里得范数。
normalize = v => v.map(x => x/Math.sqrt(v.map(x => x * x).reduce((a, b) => a + b)))
不幸的是,它效率不高,因为每个条目都会一遍又一遍地计算规范。我们能否以一种避免重复评估的方式修改这个“单行”?
编辑:我发现的一种方法 - 不是特别优雅且可读性不强 - 需要向最外层的 lambda 添加另一个输入参数并将其用作规范的输入:
normalize = w => (norm => w.map(x => x / norm))(Math.sqrt(w.map(x => x * x).reduce((a, b) => a + b)))
【问题讨论】:
-
只是……不要写成一行然后再拆分一下……?即使是最初的版本也很难阅读。大概这不是打代码打高尔夫球,写一个班轮不是目标。
标签: javascript arrays callback closures