Возможны ли массивы переменной длины с помощью Javascript
Я хочу создать массив переменной длины в Javascript.
Это возможно. Быстрый поиск в Google для "массива длины переменной Javascript", похоже, не дает ничего, что было бы удивительно, если бы это было возможно.
Должен ли я вместо этого иметь String, который я продолжаю добавлять с символом разделителя, или есть лучший способ получить переменную типа переменной типа.
Ответы
Ответ 1
Массивы 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
Для получения дополнительной информации см. документацию .
Ответ 2
Да, массивы переменной длины возможны с прототипом Javascript Array. Как отметил 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
Или...
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
Ответ 3
Вы также можете использовать конструктор 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);
});