Javascript,基本关联数组

时间:2015-12-10 19:38:39

标签: javascript associative-array

我有一个简单的字符串,我把它分成一个数组:

var alphabet = "a,b,c,d,e";
var letters = alphabet.split(",");

var dict = [];
for ( var i = 0; i < letters.length; i++ ) {
    dict[ letters[i] ] = true;
}

当我做一个

时,让我感到困惑的是什么
console.log(dict[letters[0]] +"|"+ dict["a"]);

我得到了

//true|undefined

我不明白字母[0]和“a”之间的区别。而且我绝对相信字母[0]和“a”都是字符串的类型。

编辑:我只是尝试将变量“dict”从方括号更改为卷曲的但仍然未定义。

编辑2:以下代码是我正在使用的。 “dictionary.txt”是一个文本文件,包含由“\ n”分隔的约90k个单词。在此文本文件中,字母“a”位于第一行。

$.get( "tiles/dictionary.txt", function( txt ) {
// Get an array of all the words
var words = txt.split( "\n" );
// And add them as properties to the dictionary lookup
// This will allow for fast lookups later
for ( var i = 0; i < words.length; i++ ) {
    dict[ words[i] ] = true;
}
console.log(dict[words[0]]+"|"+dict["a"]);
});

也许我应该刚刚开始使用它,而不是试图制作它的简化版本。

4 个答案:

答案 0 :(得分:5)

问题是你的文本文件有回车符。拆分换行符("\n")不会删除回车符,因此数组的第一个元素不是"a"而是"a\r"。如果您将代码修改为以下代码,它应该可以正常工作,就像在this fiddle中一样:

$.get("https://dl.dropboxusercontent.com/u/16966255/dictionary.txt",
      function(txt) {
        var words = txt.split("\r\n");
        var dict = {};
        for (var i = 0; i < words.length; i++) {
          dict[ words[i] ] = true;
        }
        alert(dict[words[0]]+"|"+dict["a"]);
      });

您可以使用与之匹配的正则表达式进行拆分,而不是要求文件包含回车符:

var words = txt.split(/\r?\n/);

但是如果你打算使用更大的文件,请注意使用正则表达式进行拆分明显低于使用常量字符串进行拆分的效率。

此外,虽然我已将dict的初始化从[]更改为更标准的{},但这不是问题所在;一个数组只是一种特殊类型的对象,而Javascript中的每个对象实际上都是一个关联数组。

答案 1 :(得分:3)

您的dict var需要是一个对象,而不是一个数组。在JavaScript中,关联数组是JSON对象。

var dict = {}; // Curly braces, not square brackets.

for ( var i = 0; i < letters.length; i++ ) {
    dict[ letters[i] ] = true;
}

console.log(dict[letters[0]] +"|"+ dict["a"]);

你会得到

// true|true

答案 2 :(得分:2)

我在JSFiddle上运行了你的代码,它记录为true | true。您可以尝试更改

dict = [];

dict = {};

在您的本地实施上查看它是否可以解决您的问题。

答案 3 :(得分:-2)

Javascript不支持关联数组。如果用[]声明它,则所有索引都必须是数字。