我想在Javascript中创建一个可变长度数组。
这可能吗?快速谷歌搜索“Javascript可变长度数组”似乎没有产生任何东西,如果有可能这样做,这将是令人惊讶的。
我是否应该使用一个字符串来代替我使用分隔符添加,或者是否有更好的方法来获取类似长度的可变数组变量。
答案 0 :(得分:40)
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
有关详细信息,请参阅documentation。
答案 1 :(得分:1)
是的,使用Javascript的Array原型可以使用可变长度的数组。如SLaks所述,您可以使用.push()
和.pop()
分别从数组末尾添加和删除项,并且数组的length属性每次分别增加和减少1。
您还可以像这样设置数组中特定索引的值:
const arr = [];
arr[100] = 'test';
console.log(arr[100]); // 'test'
console.log(arr.length); // 101
console.log(arr[99]); // undefined
除索引100
以外的所有其他数组索引均为undefined
。
您还可以通过简单地设置数组的length属性来调整数组的长度,如下所示:
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
数组的length属性可以为的最大值是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
答案 2 :(得分:0)
您还可以使用Array()
构造函数。
const desiredLength = 5; // could be dynamically generated
const list = new Array(desiredLength); // will be length 5
一个警告是,您将无法使用Array(n).map()
来映射初始元素。相反,您可以使用Array.from()
(Documentation)。
const desiredLength = 5; // could be dynamically generated
const passkeys = Array.from(Array(desiredLength), () => {
return Math.random().toString(32).substring(2, 10);
});