2010-02-04 15 views

Respuesta

16
var foo = myarray[myarray.length - 1]; 

El término preferido es el elemento, en lugar de la clave.

EDIT: ¿O quiere decir el último índice? Eso es myarray.length - 1. Tenga en cuenta que las matrices de JavaScript solo se pueden indexar numéricamente (aunque las matrices también son objetos, lo que causa cierta confusión).

+0

Puede ser incorrecta, debería echar un vistazo a ese puesto. – user198729

+0

¿Qué "puede estar mal"? –

+4

@ user198729 Las matrices en JavaScript funcionan de forma diferente a PHP. PHP los implementa como matrices dispersas, razón por la cual el índice del primer/último elemento no siempre es 0/len-1. En JavaScript, todas las matrices son matrices densas, elementos de índice de base cero, totalmente poblados (quizás indefinidos) de 0 a .length-1. – nicerobot

2

La última clave de una matriz siempre es arr.length-1 como arreglos siempre comienzan con llave 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 
4

Si se trata de una matriz plana, esto haría:

return array.length - 1; 

Sin embargo, si tiene una matriz asociativa , debe conocer la clave y recorrerla. Sin embargo, tenga en cuenta que JavaScript no conoce una "matriz asociativa", ya que la mayoría de los elementos en JavaScript son objetos.

Descargo de responsabilidad: El uso de matrices asociativas en JavaScript es generally not a good practice y puede provocar problemas.

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

¿Por qué usar un 'Array'? No está utilizando la disposición de la misma (es decir, la propiedad mágica 'length') por lo que también podría usar un' Objeto'. Además, la especificación JavaScript no garantiza el orden de las teclas cuando se utiliza un bucle 'for ... in', por lo que no existe la" última clave " –

+0

En el primer ejemplo, utilicé la propiedad length. Como esta propiedad no está disponible en matrices asociativas, agregué el segundo ejemplo, que demuestra claramente un caso de uso de una "última clave simulada".Como el OP conocería el nombre de la última clave, sería posible obtener el elemento real con el método anterior. –

+0

Re. la propiedad de longitud, me refería al segundo ejemplo, no al primero. –

2

primero lo siento por inglés pobre. suponga que su matriz es "matriz asociada a la clave" con las teclas de cadena en formato numérico. necesitará 3 pasos: obtener todas las claves de matriz. convertir claves de matriz a entero. obtener el máximo o la longitud o cualquier otra propiedad de claves.

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 

Espero ayudado

+0

luego para responder la pregunta original de cuál es la última clave en la matriz asociativa que tuve que hacer: stringKeys [len-1] o si quieres un entero integerKeys [len-1]. –

0
Math.max(...[...myArray.keys()]); 

Aquí myArray es el nombre de una matriz.

Esta es una solución basada en la cuestión planteada. Suponiendo que la matriz es una matriz unidimensional o todas las teclas de la matriz son numéricas.

Lecturas: Math.max, Array.prototype.keys(), Iterators and generators

Cuestiones relacionadas