在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
默认情况下,Uint8Array、Uint16Array和Uint32Array类的值保持为零,因此不需要任何复杂的填充技术,只需执行以下操作:
var ary = new Uint8Array(10);
默认情况下,数组ary的所有元素都将为零。
其他回答
ES6溶液:
[...new Array(5)].map(x => 0); // [0, 0, 0, 0, 0]
默认情况下,Uint8Array、Uint16Array和Uint32Array类的值保持为零,因此不需要任何复杂的填充技术,只需执行以下操作:
var ary = new Uint8Array(10);
默认情况下,数组ary的所有元素都将为零。
let filled=[];填充长度=10;fill.fill(0);console.log(已填充);
我最快的功能是:
function newFilledArray(len, val) {
var a = [];
while(len--){
a.push(val);
}
return a;
}
var st = (new Date()).getTime();
newFilledArray(1000000, 0)
console.log((new Date()).getTime() - st); // returned 63, 65, 62 milliseconds
使用本机push和shift向数组中添加项比声明数组范围并引用每个项来设置其值快得多(大约10倍)。
fyi:在firebug(firefox扩展)中运行时,第一个循环一直在倒计时,我总是会得到更快的时间。
var a = [];
var len = 1000000;
var st = (new Date()).getTime();
while(len){
a.push(0);
len -= 1;
}
console.log((new Date()).getTime() - st); // returned 863, 894, 875 milliseconds
st = (new Date()).getTime();
len = 1000000;
a = [];
for(var i = 0; i < len; i++){
a.push(0);
}
console.log((new Date()).getTime() - st); // returned 1155, 1179, 1163 milliseconds
我很想知道T.J.Crowder对此有何看法?:-)
使用lodash或下划线
_.range(0, length - 1, 0);
或者,如果您已有一个数组,并且需要一个相同长度的数组
array.map(_.constant(0));