JavaScript是否支持可变长度数组?

22

我想在Javascript中创建一个可变长度的数组。

这是可能的吗?如果可能,那么对于"Javascript variable length array" 的快速谷歌搜索似乎没有任何结果,这将令人感到惊讶。

我应该使用一个字符串,并附加分隔符字符,还是有更好的方法来获取类似于可变长度数组的变量。

3个回答

49

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
为什么arr.push("abc");不是一个好主意? - Scott Uphus

3

是的,Javascript 的数组原型可以使用可变长度数组。正如 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

您还可以通过设置数组的长度,来调整数组的长度,如下所示:

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的数字,它会抛出一个范围错误:

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

0

你也可以使用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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接