为什么这不迭代?
(Array(5)).reduce(function(cur,prv,n,a){alert(n)},'');
我从未到达函数体,似乎忽略了所有空值,这不是我想要的。
最佳答案
据我了解,Array(5)
返回一个 Array Object
的实例,其属性为 length
(值 5),但没有值(value)观。这里能够使用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] );
但是将会在某个时刻遇到最大调用堆栈错误。对于大型数组,字符串/分割方法仍然有效(尽管速度有点慢)。在我的(不太快的)计算机上使用 node.js 映射 Array(1000000)
和 string/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.
关于javascript - js 减少只有空值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535003/