21

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

这可能吗。快速谷歌搜索“Javascript 可变长度数组”似乎没有产生任何结果,如果可以做到这一点,那将是令人惊讶的。

我应该改为使用一个字符串来代替分隔符,还是有更好的方法来获得一个可变长度的类似数组的变量。

4

3 回答 3

48

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

有关详细信息,请参阅文档

于 2010-03-24T02:39:30.487 回答
3

是的,使用 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

除了 index 之外的所有其他数组索引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
于 2019-03-29T01:35:35.023 回答
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);
});
于 2019-10-05T15:14:12.510 回答