【发布时间】:2020-10-03 09:04:16
【问题描述】:
我的代码中有两个函数,一个使用 map(),另一个使用 filter()
const eip = [...new Map(elasticIps.map(e => [e.publicIp, e])).values()];
const eip = elasticIps.filter((v,i,a)=>a.findIndex(t=>(t.publicIp === v.publicIp))===i)
他们都为我做完全相同的事情,但我不知道找出哪个更快的最佳方法
【问题讨论】:
-
developer.mozilla.org/en-US/docs/Web/API/Console/time
console.time()? -
第二个使用嵌套for循环,所以时间复杂度是O(n ^ 2)
-
问题与“函数式编程”无关。对于结果/语义相同的任何函数 g 和 f,问题都是相同的。
-
这段代码的“性能”也取决于元素的数量。对于小尺寸,它不相关。对于大尺寸,一个明显更好,因为基本复杂性不同。我可能会使用没有额外性能信息的第一种形式(缩进略有不同),因为它更好地“吸引我的眼睛”到唯一性意图,并且可能避免大量项目的一些糟糕情况。
-
用真实世界的数据进行测试。例如:对于特定数据集和要求,快速排序可能比 O(N^2) 和 O(N^3) 算法慢。一般来说,第一个应该是最好的(它也恰好是最优雅的)。此外,如果您处于对象初始化和微选择成为一个因素(这不太可能)的情况下,就地改变一个对象而不是第一个对象会更快。即使你的语法可能是最优雅的。
标签: javascript typescript performance performance-testing