gpt4 book ai didi

javascript - 数组过滤和对象转换: what is fastest and what other considerations matter?

转载 作者:行者123 更新时间:2023-11-29 16:41:24 24 4
gpt4 key购买 nike

假设我需要将数组转换为对象,并在此过程中进行一些过滤。

我有两种方法,一种是可链接的函数方法,例如 .map.filter.reduce,另一种是循环带有老式for循环的数组并改变一个对象。

功能方式:

const output = fields
.filter(field => field.required)
.map(field => field.name)
.reduce((acc, cur, i) => {
acc[cur] = false;
return acc;
}, {});

老派for循环方式:

let output2 = {};
for (var i = 0; i < fields.length; i++) {
if (fields[i].required) {
output2[fields[i].name] = false;
}
}

我更喜欢函数式方法,因为我认为它可以带来更好的可读代码。然而,我很惊讶(也有点失望)地发现,函数式方法始终比非函数式、老式的 for-loop 转换方式慢。请查找the JSBench here .

我认为这里可能有几个问题:

  1. 我是个白痴,我的实现有缺陷但可以优化。
  2. “JSBench 不是衡量性能的最佳方法。工具 X、Y、Z 是衡量性能的更好方法”
  3. “函数式方法的性能损失是值得的,因为您可以使用 const,它具有其他有益的方面,例如(半)不变性。”

有人愿意称重吗?

您可以在 JSBench 链接中找到我正在使用的测试数组。

最佳答案

“过滤映射减少”循环同一数组 3 次。所以一个 for 循环总是更快。但减少它本身的效果就很好

    const output = fields
.reduce((acc, cur, i) => {
if(cur.required){
acc[cur.name] = false;
}
return acc;
}, {});

关于javascript - 数组过滤和对象转换: what is fastest and what other considerations matter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com