【发布时间】:2015-12-15 00:59:48
【问题描述】:
我正在尝试将数组中大于 10 的所有元素过滤到一个新数组中。我故意不使用Array.prototype.filter(),因为我想学习reduce() 方法。这是我正在玩的代码
var collection = [3, 5, 11, 23, 1];
// fileter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.push(collectionElemet);
}
}, []);
我期待filteredArr 在第一次回调执行时会被初始化为一个空数组,就像here 提供的许多示例一样。但是当我运行这段代码时,我得到了错误
Cannot read property 'push' of undefined,我在哪里搞砸了?谢谢!
【问题讨论】:
-
如果条件为真 - 你返回一个数字,如果不是真 - 你返回一个
undefined。如果您只是想过滤 - 使用Array.prototype.filter,您当前的代码是丑陋且具有误导性的。 -
@zerkms:这对生产代码是公平的,而不是教育/实验。 OP 明确表示他知道
filter,但正试图了解reduce。
标签: javascript arrays reduce