在JavaScript中创建任意长度的零填充数组最有效的方法是什么?
当前回答
虽然这是一个旧线程,但我想添加我的2美分。不知道这有多慢/快,但它是一个快速的单线。以下是我所做的:
如果我想预先填写数字:
Array.apply(null, Array(5)).map(Number.prototype.valueOf,0);
// [0, 0, 0, 0, 0]
如果我想预先填充字符串:
Array.apply(null, Array(3)).map(String.prototype.valueOf,"hi")
// ["hi", "hi", "hi"]
其他答案表明:
new Array(5+1).join('0').split('')
// ["0", "0", "0", "0", "0"]
但如果您想要0(数字)而不是“0”(字符串中为零),则可以执行以下操作:
new Array(5+1).join('0').split('').map(parseFloat)
// [0, 0, 0, 0, 0]
其他回答
已经提到的ES6填充方法很好地解决了这个问题。截至目前,大多数现代桌面浏览器已经支持所需的Array原型方法(Chromium、FF、Edge和Safari)[1]。您可以在MDN上查找详细信息。一个简单的用法示例是
a = new Array(10).fill(0);
考虑到当前的浏览器支持,除非您确定您的受众使用的是现代桌面浏览器,否则您应该谨慎使用。
最快的方法是使用forEach=)
(我们保持IE<9的向后兼容性)
var fillArray = Array.prototype.forEach
? function(arr, n) {
arr.forEach(function(_, index) { arr[index] = n; });
return arr;
}
: function(arr, n) {
var len = arr.length;
arr.length = 0;
while(len--) arr.push(n);
return arr;
};
// test
fillArray([1,2,3], 'X'); // => ['X', 'X', 'X']
创建全新阵列
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)]);
使用对象表示法
var x = [];
零填充?喜欢
var x = [0,0,0,0,0,0];
填充了“undefined”。。。
var x = new Array(7);
带零的obj符号
var x = [];
for (var i = 0; i < 10; i++) x[i] = 0;
作为补充说明,如果修改Array的原型
var x = new Array();
and
var y = [];
将对原型进行修改
无论如何,我不会过分关注这个操作的效率或速度,你可能会做很多其他事情,这些事情比安装一个包含零的任意长度数组更浪费和昂贵。
function zeroFilledArray(size) {
return new Array(size + 1).join('0').split('');
}