私は単純な文字列を持っていて、それを配列に分割します:
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」で区切られた約9万語を含むテキストファイルです。このテキストファイルでは、文字「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"]);
});
単純化したバージョンを作成するのではなく、これから始めるべきだったのかもしれません。
問題は、テキストファイルにキャリッジリターンがあることです。改行で分割は、("\n"
配列の最初の要素ではないので)、キャリッジリターンを除去しない"a"
けれども"a\r"
。コードを次のように変更すると、このフィドルの場合と同じように機能するはずです。
$.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のすべてのオブジェクトは実際には連想配列です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加