为什么不迭代?
(Array(5)).reduce(function(cur,prv,n,a){alert(n)},'');
我从未到过函数体,似乎忽略了所有空值,这不是我想要它做的。
答案 0 :(得分:1)
据我所知Array(5)
返回Array Object
的实例,其属性为length
(值为5),但没有值。在这里使用reduce
(或其他数组方法,如map
)的一种方法是:
String(Array(5)).split(',').reduce(function (cur, prv, n, a) { /* ... */ })
另一种选择可能是:
Array.apply(null,{length: 5}).map( [callback] );
// or
Array.apply(null,Array(5)).map( [callback] );
但 会在某个时刻遇到最大的调用堆栈错误。字符串/拆分方法对大型数组保持工作(尽管速度稍慢)。在我的(不那么快)计算机映射Array(1000000)
上使用node.js并使用字符串/ split-method持续0.47秒,同样的array.apply方法使用RangeError
崩溃(最大值调用堆栈大小超过)。
您还可以编写一个'静态'数组方法来创建一个包含n个值的Array
和所有可用/适用的Array
方法:
Array.create = function (n, mapCB, method, initial) {
method = method in [] ? method : 'map';
var nwArr = ( function(nn){ while (nn--) this.push(undefined); return this; } )
.call([], n);
return mapCB ? nwArr[method](mapCB, initial) : nwArr;
};
// usages
Array.create(5, [callback], 'reduce', '');
Array.create(5).reduce( [callback], '');
Array.create(5).map( [callback] ).reduce( [callback] );
// etc.
答案 1 :(得分:0)
正如其他人所说的那样,reduce的实现导致它抛出一个TypeError,因为调用数组没有初始值。要初始化一个初始值为undefined并成功调用该函数的数组,请尝试以下方法:
Array.apply(undefined, Array(5)).reduce(function(cur,prv,n,a){alert(n)},'');