1) Tengo esta matriz de Javascript:

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

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

result.detectedSourceLanguage = 'en';

3) Ahora, quiero imprimir el nombre completo del idioma haciendo esto:

alert(lang[result.detectedSourceLanguage]);

El cuadro de diálogo muestra: indefinido

¿Alguna idea?

Por cierto: estoy usando JQuery, por lo que las soluciones de JQuery son bienvenidas.

8
Andres SK 6 sep. 2009 a las 06:41

4 respuestas

La mejor respuesta

Un Array usa índices enteros. Probablemente desee un Object, que admite índices de cadena:

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'
};

(El último ejemplo es probablemente mejor ya que más programadores de JS estarían contentos con él).

21
strager 6 sep. 2009 a las 02:58

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

0
David Andres 6 sep. 2009 a las 02:49

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

  • result no está definida
  • result no es un objeto o no tiene ningún atributo llamado detectedSourceLanguage
  • El valor de result.detectedSourceLanguage no es una cadena o no existe tal clave en lang (entonces se supone que devuelve undefined para alert(lang[result.detectedSourceLanguage]);)

Por cierto, su problema no tiene nada que ver con jQuery

1
Imran 6 sep. 2009 a las 02:51

Este script genera un cuadro de mensaje (marcado en IE y 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.

3
Eran Betzalel 6 sep. 2009 a las 03:00