3

jQuery で配列を設定しようとしていますが、その上で for ループを実行する必要があります。しかし、何らかの理由で連想配列を使用できないようですか?

var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);

これは単なるテストですが、0 を返しますか?

4

4 に答える 4

11

associative arrayJavaScript で思い通りに作成することはできません。代わりに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;

ただし、すべてのブラウザーでサポートされているわけではありません。

于 2012-08-07T17:45:58.493 に答える
2

別のアプローチは、並行して構築する2つの異なるアレイをセットアップすることです。

var items = [], items2 = [];
items.push('foo');
items2.push(123456);
// etc.
alert(items2.length);​

このアプローチの効率は、どのように使用するかによって異なります。アイテムのリストをループしてそれぞれに何かをするだけの場合は、このアプローチの方が効率的かもしれません。ただし、連想配列()のように使用する必要がある場合items['foo']は、オブジェクトを作成することをお勧めします。

于 2012-08-07T17:55:09.750 に答える
2
var items = new Array();
items['foo'] = 123456;

問題は最初の行にあります。配列のインデックスに項目を追加していると思い込んでいますが、foo実際にitemsはキーfooと値を持つ変数にプロパティを追加しています123456。入力items.fooすると、 が返されます123456

このアプローチの問題は、配列にプロパティを追加しても、その長さが魔法のように増加しないことです。

数値以外のインデックスが必要な場合は、配列の代わりにオブジェクトを使用する必要があります。

var items = {
    foo: 123456,
    bar: 789012,
    baz: 345678,
    bat: 901234
};
于 2012-08-07T17:52:48.870 に答える
1

.length プロパティは、配列の最大の数値インデックスを返します。したがって、あなたの場合、数値インデックスはなく、0 を返します。

items[98] = "something";

items.length は 98..! .length プロパティは注意して使用し、数値以外の指標も数えたい場合は、オブジェクト (配列もオブジェクト) をループして、それ自体のプロパティを数えます。

于 2012-08-07T17:53:40.297 に答える