2009-09-06 9 views
8

1) Tengo esta matriz de JavaScript:Finding cadena de clave en Javascript gama

lang=new Array(); 
lang["sq"]="Albanian"; 
lang["ar"]="Arabic"; 
lang["en"]="English"; 
lang["ro"]="Romanian"; 
lang["ru"]="Russian"; 

2) En otro proceso, hay un valor devuelto en una variable:

result.detectedSourceLanguage = 'en'; 

3) ahora, quiero imprimir el nombre completo lenguaje al hacer esto:

alert(lang[result.detectedSourceLanguage]); 

el cuadro de diálogo: indefinido

¿Alguna idea?

BTW: estoy utilizando JQuery, por lo que las soluciones de JQuery son bienvenidas.

+0

¿Intentaste usar index's? 0,1,2,3? Al declarar variable usaste VAR? Intenta también llamar a esa variable "resultDetectedSourceLanguage" ... No sé qué más decir ... :) – Gavrisimo

+0

Se puede verificar que tienes la matriz definida para cuando intentas acceder a ella. Por cierto, ¿a qué te refieres con "en algún otro proceso"? – Jaime

+0

si llamo: alert (lang ['en']); imprime en inglés como debería. El problema es cuando hago esto: alerta (lang [var1]); (donde var1 tiene el valor 'en'). – andufo

Respuesta

21

Un Array usa índices enteros. Es posible que desee un Object, que apoya a los índices de cadenas: (. El último ejemplo es probablemente mejor a medida que más programadores JS sería feliz con él)

lang=new Object(); 
lang["sq"]="Albanian"; 
lang["ar"]="Arabic"; 
lang["en"]="English"; 
lang["ro"]="Romanian"; 
lang["ru"]="Russian"; 

// or 

lang = { 
    'sq': 'Albanian', 
    'ar': 'Arabic', 
    // ... 
    'ru': 'Russian' 
}; 

+1

Solo una nota sobre por qué funcionaba el OP a veces: en JS Las matrices son objetos, por lo que puede adjuntarles propiedades arbitrarias como lo haría con cualquier otro objeto. Sin embargo, como se descubrió, estas propiedades adicionales pueden perderse si la matriz se serializa a su sintaxis normal '['val 1', 'val 2', 'val 3, ...]'. Es probable que en algún lugar de JQuery o en otro lugar se esté produciendo una serialización/deserialización en la matriz y se pierdan las propiedades adicionales. –

+0

Sé que un 'Array' es un' Object', pero en realidad, debe tratarlo como un conjunto secuencial (como 'std :: vector' en el STL de C++) y no un conjunto asociativo (como' std :: map' en Las matrices de tipo STL o PHP de C++), para evitar confusiones. La serialización/conversión puede ser el problema como usted sugiere, Adam. – strager

0

Intente alertar a result.detectedSourceLanguage inmediatamente antes de su uso. Existe la posibilidad de que no sea igual a lo que espera. Esto debería funcionar.

+0

realmente esa alerta muestra: en – andufo

+0

¿contra qué navegador está ejecutando esto? –

1

Compruebe el tipo y el valor de result (y result.detectedSourceLanguage). Podría ser uno de los siguientes

  • result no está definido
  • result no es un objeto o no tiene ningún atributo nombrado detectedSourceLanguage
  • Valor de result.detectedSourceLanguage no es una cadena o no hay tal clave en lang (entonces se supone que debe volver a undefinedalert(lang[result.detectedSourceLanguage]);)

por cierto, el problema no tiene nada que ver con jQuery

+0

que no tiene nada que ver con el problema. si llamo: alert (lang ['en']); imprime en inglés como debería. – andufo

3

Este script genera un cuadro de mensaje (comprobado en IE & FF) que dice "Inglés":

lang = new Array(); 
lang["sq"] = "Albanian"; 
lang["ar"] = "Arabic"; 
lang["en"] = "English"; 
lang["ro"] = "Romanian"; 
lang["ru"] = "Russian"; 

detectedSourceLanguage = 'en'; 

alert(lang[detectedSourceLanguage]); 

el único problema podría ser el objeto result.

+0

agregué alerta (lang [String (detectedSourceLanguage)]); que funcionó. ¡Gracias! – andufo