gpt4 book ai didi

javascript - JS 中的 _forEach 实现返回未定义

转载 作者:行者123 更新时间:2023-12-04 09:30:22 25 4
gpt4 key购买 nike

编辑:正如其他用户所指出的,这实际上是 _map 的实现,因为 _forEach 并不意味着返回数组的副本。
我试图了解像 _forEach 这样的函数是如何工作的。为此,我想出了一个 _forEach 实现。
但是,我的实现目前只是返回一个未定义元素的数组,但我真的不知道哪里出了问题。

function _forEach(arr, cb) {
var storage = [];
for (let i = 0; i < arr.length; i++) {
storage.push(cb(arr[i], i, arr));
}
return storage;
}
var list = ["hay", "lal", "pay"];
list = _forEach(list, function(name, i, list) {
name.replace("a", "");
});

console.log(list);
据我了解, storage.push(cb(arr[i], i, arr))应该将回调的返回值存储到新数组中,然后 return storage应该有更改后的数组的副本。
但是调用后console.log(list)的结果就是[undefined, undefined, undefined]。
但是,如果我添加一个 console.log(name.replace('a', ''))在回调中,我可以看到过滤器被正确应用。那么为什么不将更改后的元素存储到新数组中呢?

最佳答案

有时词汇表也很重要,
您正在使用(实现)一个 forEach 并期望它表现得像一个 map 。
Array#forEach 只是为了对列表中的每个项目运行回调,没有其他目的......
Array#map 确实是我们期望从 A 映射项目的内容至 B并将它们累积到一个新数组中( Functor f => (a → b) → f a → f b )。

const original = ["hay", "lal", "pay"];

const withoutA = original.map(
(word) => word.replace(/a/gi, ''),
);

console.log(
'original without "a"',
withoutA
);

  • forEach VS map
  • 关于javascript - JS 中的 _forEach 实现返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62869332/

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