23

私はPythonで簡単な例を持っています:

programs = {}
if not programs.has_key(( program, time )):
     programs[( program, time )] = 0
programs[( program, time )] = programs[( program, time )] + 1

Javascript で配列をキーとして使用するには?

4

4 に答える 4

42

これは「動作」します。(でもオススメはしません)

var a = {};
var b = [1,2,3];    
a[b] = 'hello';

// a[b] evaluates to 'hello'
// a[[1,2,3]] evaluates to 'hello'
// a['1,2,3'] evaluates to 'hello'

配列 [1,2,3] をハッシュ (マップ/連想配列) キーとして渡すと、ハッシュ ルックアップを実行する前に文字列 '1,2,3' に変換されるため、機能します。異なるハッシュ値にマップするために同じ値の 2 つの異なる配列を必要としない限り、ニーズに合っているはずです。

var c = [1,2,3]
// a[c] evaluates to 'hello' even though we never executed a[c] = 'hello'
// but b == c evaluates to false
// b & c are two separate objects with the same values, so when they
// get converted to a string for hashing, they return the same value from the hash

前述のとおり、オブジェクト参照をキーとして使用する場合は、標準の JavaScript ハッシュ以上のものが必要になります。

アップデート

@speedplane からのコメントに基づく:

toString()配列をハッシュキーに渡すと、JSが配列を呼び出すのではないかと思います。したがって、実際にキーとして取得するものを簡単にテストできます。

 ["x", "y", "z"].toString();                // 'x,y,z'
 ["x,y,z"].toString();                    // 'x,y,z'
 [1,2,3].toString();                      // '1,2,3'
 [1,2,'3'].toString();                    // '1,2,3'
 [[1],[2],[3]].toString();                // '1,2,3'
 [["x",1], ["y",2], ["z",3]].toString();  // 'x,1,y,2,z,3'

繰り返しますが、何が起こっているのかを本当に理解していない限り、これを行わないことをお勧めします。それでも、私はそれをしません。

于 2012-04-16T12:29:05.357 に答える
20

JavaScriptキーは文字列です。

WeakMap配列を他のオブジェクトにマップするには、、またはカスタムメソッドが必要です。

于 2012-04-16T12:23:09.697 に答える
-2

これでうまくいきますか?

jsfiddle

<script>
var ary = {person1:'valerie', person2:'alex'};
for (key in ary) {
    document.write(key, '<br>')
}

document.write(ary['person2'], '<br>')
</script>
于 2012-04-16T12:28:44.817 に答える