Возможны ли массивы переменной длины с помощью Javascript

Я хочу создать массив переменной длины в Javascript.

Это возможно. Быстрый поиск в Google «массива переменной длины Javascript», похоже, ничего не дает, что было бы удивительно, если бы это было возможно сделать.

Должен ли я вместо этого иметь строку, к которой я продолжаю добавлять символ разделителя, или есть лучший способ получить переменную, подобную массиву переменной длины.


person Ankur    schedule 24.03.2010    source источник


Ответы (3)


Массивы Javascript не имеют фиксированной длины; вы можете делать все, что хотите, в любом индексе.

В частности, вы, вероятно, ищете метод push:

var arr = [];
arr.push(2);            //Add an element
arr.push("abc");        //Not necessarily a good idea.
arr[0] = 3;             //Change an existing element
arr[2] = 100;           //Add an element
arr.pop();              //Returns 100, and removes it from the array

Дополнительные сведения см. в документации.

person SLaks    schedule 24.03.2010

Да, массивы переменной длины возможны с прототипом массива Javascript. Как отметил SLaks, вы можете использовать .push() и .pop() для добавления и удаления элементов из конца массива соответственно, и свойство длины массива будет каждый раз увеличиваться и уменьшаться на 1 соответственно.

Вы также можете установить значение определенного индекса в массиве следующим образом:

const arr = [];
arr[100] = 'test';
console.log(arr[100]); // 'test'
console.log(arr.length); // 101
console.log(arr[99]); // undefined

Любой другой индекс массива, кроме индекса 100, будет undefined.

Вы также можете настроить длину массива, просто установив свойство длины массива, например:

const arr = [];
arr[100] = 'test';
arr.length = 1000;
console.log(arr[100]); // 'test'
console.log(arr.length); // 1000

Or...

const arr = [];
arr[100] = 'test';
console.log(arr.length); // 101
arr.length -= 10;
console.log(arr.length); // 91
console.log(arr[100]); // undefined

Максимальное значение, которое может иметь свойство длины массива, равно 4 294 967 295. Интересно, что вы можете установить значения массива с индексами больше 4 294 967 295:

const arr1 = [];
const arr2 = [];
arr1[4294967294] = 'wow';
arr2[4294967295] = 'ok?';
console.log(arr1[4294967294]); // 'wow'
console.log(arr1.length); // 4294967295
console.log(arr2[4294967295]); // 'ok?'
console.log(arr2.length); // 0

Если вы попытаетесь установить длину числа больше 4 294 967 295, будет выдано RangeError:

const arr = [];
arr.length = 4294967296;
console.log(arr.length); // RangeError: Invalid array length
person Spencer    schedule 29.03.2019

Вы также можете использовать конструктор Array().

const desiredLength = 5; // could be dynamically generated

const list = new Array(desiredLength); // will be length 5

Одно предостережение заключается в том, что вы не сможете отобразить начальные элементы, используя Array(n).map(). Вместо этого вы можете использовать Array.from() (Документация).

const desiredLength = 5; // could be dynamically generated

const passkeys = Array.from(Array(desiredLength), () => {
    return Math.random().toString(32).substring(2, 10);
});
person rideron89    schedule 05.10.2019