【发布时间】:2014-04-08 23:12:02
【问题描述】:
我最近发现了以下snippet of code on SO 来帮助快速使用默认值填充数组:
Array.apply(null, new Array(3)).map(function() {return 0;});
鉴于Array构造函数和apply方法的行为,上面的sn-p也可以改写成这样:
Array.apply(null, [undefined, undefined, undefined]).map(function() {return 0;});
在处理您希望使用默认值填充的稀疏数组时,此技术也很有用:
var sparseArr = [3,,,4,1,,],
denseArr = Array.apply(null, sparseArr).map(function(e) {
return e === undefined ? 0 : e;
});
// denseArr = [3,0,0,4,1,0]
然而,其中出现了两个奇怪的地方:
- 如果
sparseArr的最后一个术语未定义,则该术语不会映射到denseArr - 如果
sparseArr仅包含一个词(例如sparseArr = [1])或单个词后跟一个未定义的单个尾词(例如sparseArr = [1,]),则生成的denseArr等于[undefined x 1]
谁能解释这种行为?
【问题讨论】:
标签: javascript arrays