在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
let filled=[];填充长度=10;fill.fill(0);console.log(已填充);
其他回答
return Array(数量).fill(1).map(n=>return n*Math.abs(~~(Math.random()*(1000-1+1))+1));
一行。
我只使用:
var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);
如果您需要在代码执行期间创建许多不同长度的零填充数组,我发现实现这一点的最快方法是使用本主题中提到的方法之一创建一次零数组,其长度永远不会超过,然后根据需要分割该数组。
例如(使用上面所选答案中的函数初始化数组),创建长度为maxLength的零填充数组,作为需要零数组的代码可见的变量:
var zero = newFilledArray(maxLength, 0);
现在,每当您需要长度为requiredLength<maxLength:
zero.slice(0, requiredLength);
在执行代码期间,我创建了数千次零填充数组,这大大加快了这个过程。
值得指出的是,Array.prototype.fill是作为ECMAScript 6(Harmony)提案的一部分添加的。在考虑线程中提到的其他选项之前,我宁愿使用下面写的polyfill。
if (!Array.prototype.fill) {
Array.prototype.fill = function(value) {
// Steps 1-2.
if (this == null) {
throw new TypeError('this is null or not defined');
}
var O = Object(this);
// Steps 3-5.
var len = O.length >>> 0;
// Steps 6-7.
var start = arguments[1];
var relativeStart = start >> 0;
// Step 8.
var k = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);
// Steps 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
len : end >> 0;
// Step 11.
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);
// Step 12.
while (k < final) {
O[k] = value;
k++;
}
// Step 13.
return O;
};
}
function zeroFilledArray(size) {
return new Array(size + 1).join('0').split('');
}