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