如何在JavaScript中获取数组中的最后一个键?

15
6个回答

20
var foo = myarray[myarray.length - 1];
首选术语为元素,而不是键。
编辑:或者您指的是最后一个索引?那就是myarray.length - 1。请记住,JavaScript数组只能按数字索引(尽管数组也是对象,这会导致一些混淆)。

5
JavaScript中的数组与PHP不同。在PHP中,它们被实现为稀疏数组,这就是为什么第一个/最后一个元素的索引并不总是0/len-1。在JavaScript中,所有数组都是密集数组,以0为基础,从0到.length-1完全填充(可能是未定义的)索引元素。 - nicerobot

6
如果这是一个“平坦的数组”,那么可以这样做:
return array.length - 1;

但是,如果你有一个关联数组,你需要知道键并循环遍历它。请注意,JavaScript 并没有"关联数组"这样的东西,因为 JavaScript 中的大多数元素都是对象。

免责声明: 在 JavaScript 中使用关联数组通常不是一个好习惯,并可能导致问题。(参考链接)

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

1
为什么要使用Array?如果您没有使用其数组特性(即神奇的“length”属性),那么最好使用Object。此外,JavaScript规范在使用for...in循环时不保证键的顺序,因此不存在“最后一个键”的概念。 - Tim Down
在第一个示例中,我使用了length属性。由于关联数组上没有此属性,因此我添加了第二个示例,它清楚地演示了“模拟最后一个键”的用例。由于OP将知道最后一个键的名称,因此可以使用上述方法获取实际元素。 - Aron Rotteveel
关于长度属性,我是指第二个示例,而不是第一个。 - Tim Down
啊,我明白了。OP特别询问如何在Array中获取键,这就是为什么(尽管它在技术上仍然是一个Object)。可能有更精细的方法来做到这一点。 - Aron Rotteveel

4

我假设你的数组是一个“关联键”数组,其键为数字格式的字符串。

  1. 获取所有数组键。
  2. 将数组键转换为整数。
  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]。 - Kev Price

2
数组的最后一个键始终为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

2
如果你的数组是一个关联数组(Object),我认为最好的方法是使用Object.keys()MDN上说:Object.keys()方法返回一个给定对象自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in循环遍历该对象时返回的顺序一致。首先在一个数字数组中获取数组的键。然后获取最后一个键,并在Object中使用它。
var keys = Object.keys(my_array);
var last = keys[keys.length - 1];
console.log(my_array[last]);

0

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