数组键值查找:先转Object还是直接用find()更高效?
性能对比:数组转键值对象查找 vs 直接使用find()
两种方式的性能本质
- 直接用
find()的问题:每次调用find()都会从头遍历数组,直到找到匹配的key,单轮查找时间复杂度是O(n)。如果需要频繁查找(比如几十次以上),总耗时会随着查找次数和数组长度线性增长,效率很低。 - 转成键值对对象的优势:先花一次遍历的时间(O(n))把数组转成键值结构,之后每次查找都是直接通过键名访问属性,时间复杂度是O(1)。不管你查多少次,后续的查找操作都是瞬间完成的,总耗时是初始化的一次遍历加上k次O(1)查找,远低于多次
find()的总开销。
修正你的转换代码
你提供的转换代码有个小错误,应该把当前元素的value赋值给对象属性,正确写法:
const myObject = {}; myArray.forEach(item => { myObject[item.key] = item.value; }); // 后续查找 const out0 = myObject[theKey0]; const out1 = myObject[theKey1];
适用场景总结
- 如果是频繁多次查找:优先转成键值对对象,性能碾压多次
find()。 - 如果只是少数几次查找:两种方式差异不大,甚至
find()因为不需要额外占用内存存储键值对象,可能略占优势,但这种场景下性能差异几乎可以忽略。
内容的提问来源于stack exchange,提问作者Elthas
相关产品推荐
相关产品推荐

