Javascript 只包含空值的数组的js reduce

Javascript 只包含空值的数组的js reduce,javascript,Javascript,为什么不迭代呢 (Array(5)).reduce(function(cur,prv,n,a){alert(n)},''); 我从未到达函数体,似乎忽略了所有的空值,这不是我想要它做的。据我所知Array(5)返回一个Array对象的实例,该对象具有属性length(值5),但没有值。使用reduce(或其他数组方法,如map)的一种方法是: String(Array(5)).split(',').reduce(function (cur, prv, n, a) { /* ... */ })

为什么不迭代呢

(Array(5)).reduce(function(cur,prv,n,a){alert(n)},'');

我从未到达函数体,似乎忽略了所有的空值,这不是我想要它做的。

据我所知
Array(5)
返回一个
Array对象的实例,该对象具有属性
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] );
但在某一点上会遇到最大的调用堆栈错误。string/split方法对于大型数组仍然有效(尽管速度稍慢)。在我的计算机上使用node.js(速度不太快)映射
Array(1000000)
和string/split方法持续0.47秒,Array.apply方法同样会崩溃,出现
RangeError
(超过最大调用堆栈大小)

您还可以编写一个“静态”数组方法来创建一个具有n个值的
数组
,以及所有可用/适用的
数组
方法:

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.

正如其他人所说,reduce的实现会导致抛出TypeError,因为调用数组没有初始值。要使用未定义的初始值初始化数组并成功调用函数,请尝试以下操作:

Array.apply(undefined, Array(5)).reduce(function(cur,prv,n,a){alert(n)},'');

这会引发一个错误:
TypeError:Reduce of empty array with not initial value
这不是一个空数组,其中所有值的类型都是
未定义的
Try
array。应用(0,array(5))。Reduce
看起来您缺少结束参数,这只是一个输入错误吗?很好的解决方案,但对于较大的数组,转换为字符串然后进行拆分的速度非常慢。我喜欢我的代码精简,所以我希望有人知道一个解决方案,我可以使用带reduce的普通数组,否则我将使用for循环