-2

これはノードシェルで行われます。

> results = []
[]
> num = 5
5
> results[num] = []
[]
> results
[ , , , , , [] ]
>

そして、私が数を文字列化しようとしても:

> results = []
[]
> num = 5
5
> results[num.toString()] = []
[]
> results
[ , , , , , [] ]
> results['5'] = []
[]
> results
[ , , , , , [] ]
>

javascriptは、オブジェクトの定義で文字列を数値として解釈しているように見えますか?

結果は次のようになります。

results = [ { '5' : [
                   { key : value },
                   { key2 : value }
                  ]
            }
          ]
4

4 に答える 4

1

これは、目的の構造を実現する方法ですが、このデータを表すためのより簡単な方法をおそらく見つけることができると思います。

var results = [];
results.push({
    '5': []
});
results[0]['5'].push({
    key: value
});
results[0]['5'].push({
    key2: value2
});

http://jsfiddle.net/jumY2/

于 2012-10-31T17:26:03.380 に答える
1

コードは記述どおりに機能していますが、非配列のjavascriptオブジェクトを使用する代わりに、配列のインデックスを値に設定しようとしているため、意図した機能がありません。例については、以下を参照してください。

results = [];
results[0] = { '5': [ { /* ... * / } ] };

これにより、

[ { '5':  [ {} ] } ]
于 2012-10-31T17:26:27.563 に答える
1

これがアレイの仕組みです。配列の長さは、その最高のインデックスによって決定されます。5番目の位置に値を割り当てると、配列の長さは6になります。

表示される出力(つまり[ , , , , , [] ])は、コンソールがアレイを出力する方法のみです。

まだ1つの要素のみが割り当てられており、割り当てているかどうかを確認できますconsole.dir(results)

このようなスパース配列を使用することはまったく問題ありませんが、実際にハッシュマップのようなものが必要な場合は、配列の代わりにオブジェクトを使用する必要があります。


注:すべてのプロパティ(配列は単なる特殊オブジェクトであるため、配列インデックスも)は文字列に変換されるため、との間に実際の違いはresults[5]ありませんresults['5']

于 2012-10-31T17:53:11.440 に答える
0

どんな種類のオブジェクトでも作業しているわけではありません。 []は配列であり、特定の魔法の特性があります。そのうちの1つは、負でない整数に見えるキーが配列を拡張することです。それらが文字列であっても、それは問題ではありません-とにかくすべてのオブジェクトキーは文字列であり、配列は依然としてオブジェクトです。

整数に見えるキーの配列の特別な扱いを望まない場合{}ではなく、を使用してみてください。[]

> results = {}
{}
> results[5] = []
[]
> results
{ '5': [] }

もちろん、値をキーと値のペアの束にすることも検討している場合は、と言うことを検討してくださいresults[5] = {}

> results = {}
{}
> results[5] = {}
{}
> results[5]['key'] = 'value'
'value'
> results
{ '5': { key: 'value' } }
> results[5]['key2'] = 'value'
'value'
> results
{ '5': { key: 'value', key2: 'value' } }

あなた[]が求めているものは、ほとんどの場合、ちょっと壊れているようです。Javascriptオブジェクトは本質的に辞書であり、それぞれ1つのキーと値のペアを持つオブジェクトのリストがあると、実際の利益なしに複雑さが増すようです。例外は、キーごとに多数の値設定し、何かを見つけるたびにペアのリスト全体をループする必要があるという醜さを我慢したい場合です。

于 2012-10-31T17:23:44.510 に答える