2010-12-20 10 views
8

que tienen 'asociativa' array a js, con¿Cómo accedo a la primera clave de una matriz 'asociativa' en JavaScript?

array['serial_number'] = 'value' 

núm_de_serie y el valor son cadenas. p. array['20910930923'] = '20101102'

Lo ordené por valor, funciona bien. Digamos que recupero el objeto 'ordenado';

Ahora quiero acceder a la primera LLAVE de la matriz 'ordenada'. ¿Cómo lo hago? No puedo pensar que necesito una iteración con

for (var i in sorted) 

y justo después de dejar allí primero ...

gracias

de edición: Solo para aclarar, sé que no es compatible con js asociativo matrices (por eso lo pongo en comas altas en el Título).

+1

http://stackoverflow.com/questions/909003/javascript-getting-the-first-index-of-an-object – Anders

+0

¿Cómo estás Clasificación de la matriz? – Emmett

+0

Emmett: haciendo esto: http://www.jamesrutherford.com/blog/2010/08/07/javascript-associative-array-sort/ – faboolous

Respuesta

1

En realidad, JavaScript no admite matrices asociativas, por lo que no puede recorrerlo en un orden implícito (por ejemplo, no puede acceder a él a través de la propiedad del indexador array[0] no accederá al primer elemento de su objeto). La sintaxis es lo que hace que parezca, pero en realidad no es así. Entonces no tienes "Orden" a tus objetos.

http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

Javascript no tiene, y no apoyo asociativas Las matrices. Sin embargo ... Todas las matrices en Javascript son objetos y la sintaxis del objeto de Javascript da una emulación básica de una matriz asociativa . Por este motivo, el código de ejemplo anterior funcionará realmente. Sea advirtió que esto no es una matriz real y tiene problemas reales si intenta usar . El elemento 'persona' en el ejemplo pasa a formar parte de las propiedades y métodos del objeto Array , solo como .length, .sort(), .splice() y todas las demás propiedades incorporadas y los métodos .

+1

uhm, ¿los objetos son matrices asociativas? – falstro

+3

No hay matrices asociativas en JavaScript, todo es un gran objeto maldito. – Anders

+1

@Anders; papas potahto, no hay objetos, son todos grandes matrices asociativas. – falstro

4

Las propiedades del objeto JavaScript se especifican para que no tengan orden, much though many people wish it were different. Si necesita ordenar, abandonar cualquier intento de utilizar un objeto y utilizar un Array lugar, ya sea para almacenar objetos de nombre-valor:

var nameValues = [ 
    {name: '20910930923', value: '20101102'}, 
    {name: 'foo', value: 'bar'} 
]; 

... o como una lista ordenada de nombres de propiedades a utilizar con su objeto existente :

var obj = { 
    '20910930923': '20101102', 
    'foo': 'bar' 
}; 

var orderedPropertyNames = ['20910930923', 'foo']; 
0

Solo pensando en la parte superior de mi cabeza, pero ¿podría tener otra matriz con los pares clave de valores intercambiados?

Entonces la respuesta sería arrayKeyValueReversed ['20101102'] = '20910930923';

Cuando ordena la matriz, utilice el primer elemento (matriz [0]) como la clave para obtener el valor en la matrizKeyValueReversed.

2

Prueba esto:

// Some assoc list 
var offers = {'x':{..some object...}, 'jjj':{...some other object ...}}; 

// First element (see attribution below) 
return offers[Object.keys(offers)[0]]; 

// Last element (thanks to discussion on finding last element in associative array :) 
return offers[Object.keys(offers)[Object.keys(offers).length - 1]]; 
Cuestiones relacionadas