jQuery で配列を設定しようとしていますが、その上で for ループを実行する必要があります。しかし、何らかの理由で連想配列を使用できないようですか?
var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);
これは単なるテストですが、0 を返しますか?
jQuery で配列を設定しようとしていますが、その上で for ループを実行する必要があります。しかし、何らかの理由で連想配列を使用できないようですか?
var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);
これは単なるテストですが、0 を返しますか?
associative array
JavaScript で思い通りに作成することはできません。代わりにObjectを使用できます。
例えば:
var items = {
foo : 123456,
bar : 789012,
baz : 345678,
bat : 901234
}
そして、あなたができる長さを計算するには:
var getObjectSize = function(obj) {
var len = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) len++;
}
return len;
};
使用する:getObjectSize(items); // output: 4
詳細については、こちらを参照してください。
もう1つは次のとおりです。
Object.keys(items).length;
別のアプローチは、並行して構築する2つの異なるアレイをセットアップすることです。
var items = [], items2 = [];
items.push('foo');
items2.push(123456);
// etc.
alert(items2.length);
このアプローチの効率は、どのように使用するかによって異なります。アイテムのリストをループしてそれぞれに何かをするだけの場合は、このアプローチの方が効率的かもしれません。ただし、連想配列()のように使用する必要がある場合items['foo']
は、オブジェクトを作成することをお勧めします。
var items = new Array();
items['foo'] = 123456;
問題は最初の行にあります。配列のインデックスに項目を追加していると思い込んでいますが、foo
実際にitems
はキーfoo
と値を持つ変数にプロパティを追加しています123456
。入力items.foo
すると、 が返されます123456
。
このアプローチの問題は、配列にプロパティを追加しても、その長さが魔法のように増加しないことです。
数値以外のインデックスが必要な場合は、配列の代わりにオブジェクトを使用する必要があります。
var items = {
foo: 123456,
bar: 789012,
baz: 345678,
bat: 901234
};
.length プロパティは、配列の最大の数値インデックスを返します。したがって、あなたの場合、数値インデックスはなく、0 を返します。
items[98] = "something";
items.length は 98..! .length プロパティは注意して使用し、数値以外の指標も数えたい場合は、オブジェクト (配列もオブジェクト) をループして、それ自体のプロパティを数えます。