【问题标题】:Are variable length arrays possible with JavascriptJavascript可以使用可变长度数组吗
【发布时间】:2010-03-24 02:37:23
【问题描述】:

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

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

我是否应该有一个字符串,而我一直使用分隔符附加它,或者有更好的方法来获得一个可变长度的类似数组的变量。

【问题讨论】:

    标签: javascript arrays variable-length


    【解决方案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
    

    有关详细信息,请参阅documentation

    【讨论】:

    • 为什么arr.push("abc"); 不是一个好主意?
    【解决方案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() (Documentation)。

      const desiredLength = 5; // could be dynamically generated
      
      const passkeys = Array.from(Array(desiredLength), () => {
          return Math.random().toString(32).substring(2, 10);
      });
      

      【讨论】:

        猜你喜欢
        • 2013-10-12
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 2020-10-15
        • 1970-01-01
        • 2014-03-27
        相关资源
        最近更新 更多