在JavaScript中创建任意长度的零填充数组最有效的方法是什么?


当前回答

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对此有何看法?:-)

洛达什:

_.fill(array, value)

是一种干净且跨浏览器安全的填充数组的方法。

我通常使用Uint8Array(速度惊人)。例如,创建1M个元素的零填充矢量:

  var zeroFilled = [].slice.apply(new Uint8Array(1000000))

我是一个Linux用户,一直为我工作,但有一次,一个朋友使用Mac时有一些非零元素。我以为他的机器出故障了,但我们找到了最安全的方法来修复它:

  var zeroFilled = [].slice.apply(new Uint8Array(new Array(1000000)) 

已编辑

铬25.0.1364.160

弗雷德里克·戈特利布-6.43萨姆·巴纳姆-4.83伊莱-3.68约书亚2.91马修·克鲁姆利-2.67硼-2.55艾伦·赖斯-2.11康纳斯-0.68推压器温度-0.67zertosh-错误

Firefox 20.0

艾伦·赖斯-1.85约书亚-1.82马修·克鲁姆利-1.79硼-137弗雷德里克·戈特利布-0.67萨姆·巴纳姆-0.63伊莱-0.59kagax-0.13推压器温度-0.13zertosh-错误

错过了最重要的测试(至少对我来说):Node.js测试。我怀疑它接近Chrome基准。

创建全新阵列

new Array(arrayLength).fill(0);

在现有阵列的末尾添加一些值

[…existingArray,…new Array(numberOfElementsToAdd).fill(0)]

实例

//**创建全新阵列**console.log(新数组(5).fill(0));//**在现有阵列的末尾添加一些值**让existingArray=[1,2,3]console.log([…existingArray,…new Array(5).fill(0)]);

const arr=数组.from({长度:10}).fill(0);控制台日志(arr)