【问题标题】:How to get last key in array in javascript?如何在javascript中获取数组中的最后一个键?
【发布时间】:2010-02-04 10:58:23
【问题描述】:

这和这个问题类似,只有 PHP->javascript

How to get numeric key of new pushed item in PHP?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:
    var foo = myarray[myarray.length - 1];
    

    首选术语是元素,而不是键。

    编辑:或者你的意思是最后一个索引?那是myarray.length - 1。请记住,JavaScript 数组只能以数字方式索引(尽管数组也是对象,这会导致一些混乱)。

    【讨论】:

    • @user198729 JavaScript 中的数组的工作方式与 PHP 不同。 PHP 将它们实现为稀疏数组,这就是为什么第一个/最后一个元素的索引并不总是 0/len-1。在 JavaScript 中,所有数组都是密集数组、零基、完全填充(可能未定义)的索引元素,从 0 到 .length-1。
    【解决方案2】:

    如果是平面数组,可以这样做:

    return array.length - 1;
    

    但是,如果您有一个关联数组,则您必须知道键并循环遍历它。请注意,尽管 JavaScript 不知道“关联数组”之类的东西,因为 JavaScript 中的大多数元素都是对象。

    免责声明: JavaScript 中关联数组的用法是 generally not a good practice,可能会导致问题。

    var x = new Array();
    x['key'] = "value";
    for (i in x)
    {
        if (i == 'key')
        {
            alert ("we got "+i);
        }
    }
    

    【讨论】:

    • 为什么要使用Array?你没有使用它的数组(即神奇的length 属性),所以你不妨使用Object。此外,在使用for...in 循环时,JavaScript 规范不保证键的顺序,因此没有“最后一个键”之类的东西
    • 在第一个示例中,我使用了长度属性。由于此属性在关联数组上不可用,我添加了第二个示例,它清楚地演示了“模拟最后一个键”的用例。由于 OP 会知道最后一个键的名称,因此可以使用上述方法获取实际元素。
    • 回复。长度属性,我指的是第二个例子,而不是第一个。
    • 啊,我明白了。 OP 专门询问如何在Array 中获取密钥,这就是原因(尽管它在技术上仍然是Object)。可能有更精细的方法可以做到这一点。
    【解决方案3】:

    首先抱歉英语不好。 假设您的数组是带有数字格式的字符串键的“键关联数组”。 您将需要 3 个步骤: 获取所有数组键。 将数组键转换为整数。 获取最大或长度或任何其他键属性。

    stringKeys= Object.keys(keyValueArray);//get keys of array 
    integerKeys=stringKeys.map(Number);//convert to integer
    mx=Math.max.apply(integerKeys);//get max
    len=stringKeys.length;//get length 
    

    希望能帮到你

    【讨论】:

    • 然后回答我必须做的关联数组中的最后一个键是什么的原始问题:stringKeys[len-1] 或者如果你想要一个整数 integerKeys[len-1]。跨度>
    【解决方案4】:

    数组的最后一个键总是arr.length-1,因为数组总是以键0开头:

    var arr = new Array(3);  // arr === [], arr.length === 3
    arr.push(0);             // arr === [undefined, undefined, undefined, 0], arr.length === 4
    arr[arr.length-1]        // returns 0
    
    var arr = [];            // arr === [], arr.length === 0
    arr[3] = 0;              // arr === [undefined, undefined, undefined, 0], arr.length === 4
    arr[arr.length-1]        // returns 0
    

    【讨论】:

      【解决方案5】:

      如果您的数组是关联数组(Object),我认为最好的方法是使用Object.keys()

      From MDN;

      Object.keys() 方法返回一个给定对象自己的属性名称的数组,其顺序与我们在正常循环中得到的顺序相同。

      首先在数值数组中获取数组的键。
      然后获取最后一个key,在Object中使用。

      var keys = Object.keys(my_array);
      var last = keys[keys.length - 1];
      console.log(my_array[last]);
      

      【讨论】:

        【解决方案6】:
        Math.max(...[...myArray.keys()]);
        

        这里myArray是一个数组的名字。

        这是基于您提到的问题的解决方案。假设数组是一维数组或所有数组键都是数字。

        阅读: Math.maxArray.prototype.keys()Iterators and generators

        【讨论】:

          猜你喜欢
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 2011-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2012-01-28
          相关资源
          最近更新 更多