Как создать нулевой заполненный массив JavaScript произвольной длины?
Каков наиболее эффективный способ создания нулевого заполненного массива JavaScript произвольной длины?
Ответы
Ответ 1
Как насчет таких попыток:
Array.apply(null, new Array(10)).map(Number.prototype.valueOf,0);
//Output as [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
или
new Array(10+1).join('0').split('').map(parseFloat)
//Output as [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
EDIT: -
Если ваш массив является динамическим, просто добавьте его в функцию, которая принимает число и заменяет 10 этой переменной.
Ответ 2
По умолчанию классы Uint8Array
, Uint16Array
и Uint32Array
сохраняют нули по мере их значений, поэтому вам не нужны сложные методы заполнения, просто:
var ary = new Uint8Array(10);
все элементы массива ary
по умолчанию будут нулями.
Ответ 3
Новые расширения массивов ES6 позволяют сделать это изначально с помощью метода fill
. Теперь край IE, Chrome и FF поддерживают его, но проверьте таблицу совместимости
new Array(3).fill(0)
даст вам [0, 0, 0]
. Вы можете заполнить массив любым значением, например new Array(5).fill('abc')
(даже объекты и другие массивы).
Кроме того, вы можете изменить предыдущие массивы с помощью fill:
arr = [1, 2, 3, 4, 5, 6]
arr.fill(9, 3, 5) # what to fill, start, end
который дает вам: [1, 2, 3, 9, 9, 6]
Ответ 4
function repeatArray(value, len){
var A=[],i=0;
while (i<len) A[i++]= value;
return A;
}
Ответ 5
Если вам нужен массив длиной 9 строк:
Array.apply(null, {length: 9}).map(function() {return 0;})
Если вам нужен массив длины X:
Array.apply(null, {length: X}).map(function() {return 0;})
Если у вас есть массив и вы хотите переписать его значения:
var arr=[54,53,6,7,88,76]
arr=arr.map(function() {return 0;})
Вы можете заполнить массив тем, что хотите, просто изменив значение return внутри функции внутри .map:
Array.apply(null, {length: 9}).map(function() {return "a string";})
Array.apply(null, {length: 9}).map(function() {return Math.random();})
Array.apply(null, {length: 9}).map(function() {return NaN;})
Array.apply(null, {length: 9}).map(function() {return null;})
Array.apply(null, {length: 9}).map(function() {return true;})
Array.apply(null, {length: 9}).map(function() {return;})
Последний заполнит массив undefined
Ответ 6
В Javascript ES6 существует очень простое решение. Я пришел сюда, потому что я пытаюсь сократить его короче:
n = 999 // arbitrary length
a = Array(n).fill(0)
console.log(a)
Ответ 7
Я тестировал как Unit8Array
[].slice.apply(new Uint8Array(n));
и метод join/split
new Array(n + 1).join('0').split('').map(parseFloat);
в jsPerf с интересными результатами. Chrome и Firefox были довольно медленными по обоим показателям (от 48 000 до 76 000 операций). Но Opera и Safari отлично справились с функцией Uint8Array (до 438 000 операций). Я думаю, что я начну использовать Uint8Array и надеюсь, что Chrome и Firefox улучшатся.
Ответ 8
Один способ может использовать рекурсию.
function fillArray(l, a) {
a = a || [];
if (0 < l) {
l -= 1;
a[l] = 0;
return fillArray(l, a);
}
return a;
}
Я также опубликовал более классический вариант:
function fillArray(l) {
var a;
for (a = []; 0 < l; l-=1, a[l]=0);
return a;
}