web-dev-qa-db-ja.com

連想配列のインデックスとしての変数-Javascript

連想配列を作成し、空の配列を作成してから、(indexName-> value)のペアを追加しようとしています。

_var arrayName = new Array;

arrayName["indexName"] = value;

// i know i can also do the last line like this:

arrayName.indexName = value;
_

indexNameに値を割り当てるとき、indexNameを動的にし、変数の値にする必要があります。だから私はこれを試しました:

_arrayName[eval("nume")] = value;
_

どこ:

_var var1 = "index";
var var2 = "Name";

var nume = '"' + var1 + var2 + '"'; 
_

しかし:alert(arrayName["indexName"]);は「値」を返さない...「未定義」と言う

何か足りないものはありますか? (eval()に詳しくない);私がしようとしている方法が行き止まりである場合、連想配列値のインデックス名を動的にする別の方法はありますか?

24
bogdan

最初は、必要なことを行うために実際の配列オブジェクトが必要だとは思わないが、プレーンなオブジェクトを使用することができる。

変数の値を使用して、ブラケット表記を使用してプロパティにアクセスできます。

var obj = {};
var nume = var1 + var2;
obj[nume] = value;

配列は単なるオブジェクトです。「連想配列」の概念は、単純なオブジェクトを使用することで実現でき、オブジェクトは値を含むプロパティのコレクションです。

真の配列は、数値インデックスを格納する必要がある場合に便利です。インデックスを割り当てるか、lengthに値を割り当てると、Pushプロパティが自動的に更新されます。

22
CMS

_arrayName[var1+var2]_を使用します

_arrayName.var_は_arrayName["var"]_と同じであることに注意してください。これは単なる構文上の砂糖です。 2番目の形式は、直面している種類の問題を扱うときに主に使用されます-動的オブジェクトキー、および英数字ではないキー(arrayName[".eval()"]を考えてください;これはまったく正当なオブジェクトキーであり、 javascript eval()関数で行います)

5
Gabi Purcaru

それにはオブジェクトを使用します:

_var hash = {}
hash["foo"] = "foo";
hash.bar    = "bar";
// This is the dynamic approach: Your key is a string:
baz         = "baz"
hash[baz]   = "hello";
_

反復するには、jQueryでforループまたは$.each()を使用します。

5
balu

私は次のようなことをしました。

let parentArray = [];
let childArray = [1, 2, 3];
childArray.name = 'my-array-1';
parentArray.Push(childArray);

ES6で名前でそれにアクセスするには;

parentArray.filter(x => x.name == 'my-array-1');
0
Mahib

実際、配列オブジェクトは不要であり、単純なオブジェクトが仕事をしました。さらに配列は、角括弧obj["var1 + var2"]内で引用符を使用して、インデックスに関連付けられた値ではなくオブジェクトプロパティの値にアクセスする必要性を導入しました(私は思います)。引用符は"var1 + var2"を文字列に変換しました。単純なオブジェクトを使用すると、引用符が不要になるため、obj[var1 + var2]を使用できます。

みんな、ありがとう !

0
bogdan

何方をお探しですか variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';

それでも、代わりにオブジェクトリテラルを使用する必要があります。 x = {}; x[variablename] = 'blah';

0
meder omuraliev

次のように、ここでは同じ 括弧表記 のプレーンオブジェクトが必要です。

var arrayName = {};
arrayName["indexName"] = value;
0
Nick Craver