Как создать нулевой заполненный массив JavaScript произвольной длины?

Вопрос:Каков наиболее эффективный способ создания нулевого заполненного массива JavaScript произвольной длины? Лучший ответ: Как насчет таких попыток: 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: - Если ваш массив является динамическим, просто

Вопрос:

Каков наиболее эффективный способ создания нулевого заполненного массива JavaScript произвольной длины?

Лучший ответ:

Как насчет таких попыток:

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 этой переменной.

Ответ №1

По умолчанию классы Uint8Array, Uint16Array и Uint32Array сохраняют нули по мере их значений, поэтому вам не нужны сложные методы заполнения, просто:

var ary = new Uint8Array(10);

все элементы массива ary по умолчанию будут нулями.

Ответ №2

Новые расширения массивов 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]

Ответ №3function repeatArray(value, len){ var A=[],i=0; while (i<len) A[i++]= value; return A; } Ответ №4

Если вам нужен массив длиной 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

Ответ №5

В Javascript ES6 существует очень простое решение. Я пришел сюда, потому что я пытаюсь сократить его короче:

n = 999 // arbitrary length a = Array(n).fill(0) console.log(a)Ответ №6

Я тестировал как 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 улучшатся.

Ответ №7

Один способ может использовать рекурсию.

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; }

Оцените статью