gpt4 book ai didi

javascript - 在循环数组时修改数组是否安全?

转载 作者:行者123 更新时间:2023-12-02 18:10:56 26 4
gpt4 key购买 nike

在循环数组时修改数组(例如推送元素)是否安全?

我正在使用每个方法下划线

最佳答案

我建议避免 each 除非您绝对需要对集合中的每个项目产生副作用(触发事件、打印结果等)。为了简单地修改您的集合,有更好的方法。

如果每个添加的元素只是单个输入元素的结果,典型的功能模式是对数组进行平面映射,这可以分为两个步骤:

  1. 使用 map 应用一个函数,为每个元素生成一个数组作为结果。总体结果将是一个数组的数组。
  2. 对该数组数组使用展平来获取一维数组。

使用underscorelodash :

var origArray = [1, 2, 3, 4];
var duplicateIf3 = function (val) { return val === 3 ? [val, val] : val; };
_.flatten(origArray.map(duplicateIf3));
// -> [1, 2, 3, 3, 4]

(在类型化 FP 中,对于不是 3 的值,函数必须返回 [val],但 flatten 并不关心——它会展平任何值你把它赋予一维。)

如果新元素依赖于它之前的所有元素,您可能会使用 reducefold 来代替,并以空数组作为初始值。

var origArray = [1, 2, 3, 4];
origArray.reduce(function (acc, val) { return acc.concat(acc).concat(val); }, []);
// -> [1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 1, 1, 2, 3, 4]

(抱歉,我想不出一个实际的例子,但这里每一步都以非常简单的方式使用前面所有步骤的完整输出来进行说明,您可以从原始数组的每个值中看到发生了什么. 另请注意,如果您不想使用下划线/lodash,则可以从 reduce 制作自己的 flatten)

reduceflatmap 更通用,但这两种方法都能够将数组转换为更大的数组,这在某种程度上取决于第一个方法。

如果您有兴趣了解更多相关信息,我强烈建议您查看免费(在线)Javascript Allongé ,作者:Reg Braithwaite。

关于javascript - 在循环数组时修改数组是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720830/

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