【发布时间】:2020-07-13 04:38:17
【问题描述】:
编辑:正如其他用户所指出的,这实际上是 _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 函数和您的调用中插入一些控制台日志,以跟踪幕后发生的事情。
-
您的回调函数不返回任何内容,因此未定义。 _forEach 也应该是 _map 真的
-
@GetSet 我在回调中添加了console.log,我可以看到它正确过滤了单词,只是没有存储它们。
-
不,您的函数没有返回语句。它只是 name.replace('a','') 没有返回值。
(function(name, i, list){ name.replace('a','') })('name',10, [])返回undefined -
我想指出,@RaghulSk 的编辑对风格的看法备受争议,不应影响您对如何编写代码的决定。我不知道为什么有人会批准该编辑,好像它实际上以任何方式提高了可读性。
标签: javascript foreach functional-programming