2016-10-03 5 views
0

私はhash tableがJavascriptで必要です。つまり、キー(文字列)を値にマッピングする連想配列を実装する必要があります(私の場合、これらは複数の整数配列です)。私は、この種のアプローチは、一般的に使用されていないか、または少なくとも私はまだウェブ上でそれを発見していないことに気づい:Javascriptでハッシュテーブルを使用する:適切な配列の配列ですか?

おそらく

var hash = ['s0']; 
 
for (var i = 5; i >= 1; i--) { 
 
    var r = Math.floor(Math.random() * 3); 
 
    hash['s'+i] = [r, r*2, r^2]; 
 
} 
 
console.log(hash); 
 
hash.forEach(function (v, i, a) { 
 
    document.getElementById('foreach').innerHTML += i + ' => ' + v + '<br>'; 
 
}) 
 
for (var i = 5; i >= 1; i--) { 
 
    var key = 's'+i; 
 
    document.getElementById('for').innerHTML += key + ' => [' + hash[key].toString() + ']<br>'; 
 
}
<p id="foreach">forEach (val,index):<br/></p> 
 
<p id="for">for:<br/></p>

宣言された配列は、ように見えるという事実によるもの新しい値を追加した後(コンソールを開いて+ボタンをクリックすると、[s1]と表示されても値が表示されます)、正しくマップされません。 forEachは、配列には1つの値しかないと仮定していますが、それらのキーのいずれかに直接アクセスするとします。 hash['s3']、それぞれの配列が返されます。

したがって、私は何か間違っていますか?私はこのアプローチを使うべきですか?


JSON内のオブジェクトは、このような場合のために、より適切である場合は、シンプルで、上記の例に似た何かを実装するための最良の方法は何ですか?

さらに、key_stringがキーとして必要な文字列の場合は、「仮パラメータ」ではないため、hash.push(key_string: val_array)が失敗します。しかし、次のようなことを行うことによって:

hash.push({'key':key_string,'value':val_array}) 

これらの配列のうちの1つを、関連するキーを使ってできるだけ簡単にアクセスできますか?

+1

オブジェクトのプロパティは、ハッシュテーブルと同じか、連想配列についての行動はJavaScript、 javascriptでハッシュテーブルを実装することは、あなたが解決しようとしている問題を解決するための間違った方法か、宿題に関する質問です。 – chiliNUT

+0

var hash = ['s0']をvar hash = {'s0': 'first_element'}に変更します。それは何を参照してください –

+0

ありがとう@chiliNUT、しかし、オブジェクトのプロパティが "ハッシュテーブルと同じように動作する"場合は、 "宿題の質問"でこれは "些細な質問"と言っている場合は、親切にハッシュテーブルの問題?私は上記と似たコードを使用していますが、私の目的のために動作しますが、 'forEach'を使用できないのは便利なことではありません... – CPHPython

答えて

1

JavaScriptマップ()を使用できないのはなぜですか?

MDN JavaScript Reference: Map

私の代わりに配列の地図を使用するには、以下のコードを変更:

var map = new Map(); 
 
for (var i = 5; i >= 1; i--) { 
 
    var r = Math.floor(Math.random() * 3); 
 
    map.set('s'+i, [r, r*2, r^2]); 
 
} 
 
console.log(map); 
 
map.forEach(function (v, i, m) { 
 
    document.getElementById('foreach').innerHTML += i + ' => ' + v + '<br>'; 
 
}) 
 
for (var i = 5; i >= 1; i--) { 
 
    var key = 's'+i; 
 
    document.getElementById('for').innerHTML += key + ' => [' + map.get(key).toString() + ']<br>'; 
 
}
<p id="foreach">forEach (val,index):<br/></p> 
 
<p id="for">for:<br/></p>

+0

よろしく!私は行方不明のものがあることを知っていた!本当に感謝します。 – CPHPython

0

のJavascriptのオブジェクトタイプは、あなたが探しているすべての動作を説明します。

var obj = {}; 
for (var i = 5; i >= 1; i--) { 
    var r = Math.floor(Math.random() * 3); 
    obj['s'+i] = [r, r*2, r^2]; 
} 

JavaScriptでのオブジェクト型についてのクールなことは、あなたが連想配列に似た構文を使用するか、ドット表記を使用してプロパティにアクセスすることができますです。

obj['key'] === obj.key 
0

コンソールでこの例を確認してください。

Object.keys(hash).forEach(function (v, i, a) { 
    console.log(i , v, hash[v]); 
}) 
var hash = {'s0':' '}; 
for (var i = 5; i >= 1; i--) { 
    var r = Math.floor(Math.random() * 3); 
    hash['s'+i] = [r, r*2, r^2]; 
} 

は、ハッシュオブジェクトが今、あなたは、配列のようなオブジェクトのキーを抽出し、それを反復処理することができますはforEachでオブジェクトにアクセスするには、キーと値のマッピング

console.log(hash); 

が含まれていることがわかり

コレクションの多くの一般的な操作を実装するhttps://lodash.com/などのライブラリの使用を開始することもできます。

+0

このコードがOPに役立つ理由の説明を追加してください。これにより、今後の視聴者からの回答が得られます。詳細については、[回答]を参照してください。 –

関連する問題