javascript - js 减少只有空值的数组

标签 javascript

为什么这不迭代?

(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/

相关文章:

javascript - 只向 DOM 添加新的数组元素

javascript - 如果屏幕尺寸大于 X,则运行脚本

javascript - 正则表达式/ng 模式接受某些字符

c# - 如何在c#中为字符串添加单引号?

javascript - 改进Jquery代码实现

javascript - angularjs-gettext : translate text in placeholder

javascript - Bower 在运行 grunt serve 后抛出 jquery "not injected"警告

javascript - 在代码沙箱内路由,由于 withRouter 而失败

javascript - Node.js promise 有时不会执行

javascript - 完成后在数组开头添加项目