【问题标题】:Finding string-key in Javascript array在 Javascript 数组中查找字符串键
【发布时间】:2009-09-06 02:41:45
【问题描述】:

1) 我有这个 Javascript 数组:

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

2)在其他一些过程中,变量中有返回值:

result.detectedSourceLanguage = 'en';

3) 现在,我想通过以下方式打印语言全名:

alert(lang[result.detectedSourceLanguage]);

对话框显示:undefined

有什么想法吗?

顺便说一句:我使用的是 JQuery,所以欢迎使用 JQuery 解决方案。

【问题讨论】:

  • 您是否尝试过使用索引? 0,1,2,3?声明变量时你使用了 VAR 吗?尝试也调用该变量“resultDetectedSourceLanguage”......不知道还能说什么...... :)
  • 可能会检查您是否在尝试访问它时定义了数组。顺便说一句,“在其他过程中”是什么意思?
  • 如果我打电话:alert(lang['en']);它按应有的方式打印英文。问题是当我这样做时: alert(lang[var1]); (其中 var1 保存“en”值)。
  • 那么断言是不可能的;无论您是否滥用了 Array(应该是 Object,{}),JavaScript 都允许这样做,并且您上面的代码确实可以按预期工作。还有其他事情发生;发布一个失败的完整测试用例。

标签: javascript arrays


【解决方案1】:

Array 使用整数索引。你可能想要一个支持字符串索引的Object

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

(后一个例子可能更好,因为更多的 JS 程序员会喜欢它。)

【讨论】:

  • 请注意为什么 OP 有时会起作用:在 JS 中,数组是对象,因此您可以像使用任何其他对象一样将任意属性附加到它们。正如我们所发现的,如果将数组序列化为正常的['val 1', 'val 2', 'val 3, ...] 语法,这些附加属性可能会丢失。可能在 JQuery 或其他地方的某个地方对数组进行了序列化/反序列化,并且其他属性丢失了。
  • 我知道 ArrayObject,但实际上,您应该将其视为顺序数组(如 C++ 的 STL 中的 std::vector)而不是关联数组(如 std::map在 C++ 的 STL 或类似 PHP 的数组中),以避免混淆。正如您所建议的那样,序列化/转换可能是问题,亚当。
【解决方案2】:

此脚本会生成一个显示“English”的消息框(在 IE 和 FF 中选中):

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

detectedSourceLanguage = 'en';

alert(lang[detectedSourceLanguage]);

唯一的问题可能是result 对象。

【讨论】:

  • 我添加了 alert(lang[String(detectedSourceLanguage)]);解决了。谢谢!
【解决方案3】:

检查result(和result.detectedSourceLanguage)的类型和值。它可能是以下之一

  • result 未定义
  • result 不是对象或没有任何名为 detectedSourceLanguage 的属性
  • result.detectedSourceLanguage 的值不是字符串或lang 中没有这样的键(那么它应该为alert(lang[result.detectedSourceLanguage]); 返回undefined

顺便说一句,你的问题与jQuery无关

【讨论】:

  • 这与问题无关。如果我打电话: alert(lang['en']);它按应有的方式打印英文。
【解决方案4】:

尝试在使用前立即提醒 result.detectedSourceLanguage。它有可能不等于你所期望的。这应该可以。

【讨论】:

  • 实际显示的警报:zh
  • 你在哪个浏览器上运行这个?
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 2020-06-19
  • 2018-08-18
  • 2016-01-26
  • 1970-01-01
  • 2018-01-20
  • 2014-05-27
相关资源
最近更新 更多