1

更新しました

私はオブジェクトを持っていますvar myObject = {};

次のようなキーを使用してビルドします。

myObject[key] = {
   name: ...
};

したがって、3つのレコードを作成したと想像してください。

myObject[13] = {...};
myObject[281] = {...};
myObject[76] = {...};

ここで、オブジェクトを配列であるかのようにループさせたいと思います。

var i,
    length = myObject.length;     // ?? Problem here 'cos it ain't an array

for (i = 0; i < length; i += 1) {
    ????
};

で3つの要素をどのように参照でき????ますか?13、281、76の数字はわかりませんがmyObject[0]、最初のレコードは見つかりません。

ありがとう。

4

2 に答える 2

8

キーが連続していない場合は、配列を使用しないでください。代わりにオブジェクトを使用してください:

var myObject = {};

オブジェクトのキーをループするには、次のfor..in構文を使用します。

for (var key in myObject) {
    var value = myObject[key];
}

現在のコードを機能させるには、すべてのキーをループして、それらに値があるかどうかを確認する必要があります。

for (var i = 0; i < myArray.length; i++) {
    var value = myArray[i];

    if (typeof value === 'undefined') continue;

    console.log(key, ' -> ', value)
}
于 2012-12-31T07:55:27.483 に答える
-1

最新のJavaScriptエンジンを使用している場合:

myArray.forEach(function(val, key) {
    // val = the value
    // key = the index
});

以上です。そのサイズ(この場合は3)を取得するには...

var size = myArray.reduce(function(prev) {
    return ++prev;
}, 0);

これを古いブラウザで機能させたい場合は、別のことをする必要があります。最も簡単な解決策は、おそらく自分で次のようなものを実装することです。

for (var i = 0; i < myArray.length; i ++) {
    var val = myArray[i];
    if (typeof val !== "undefined") {
        console.log(val);
    }
}

そのサイズを取得するには、同様の試みです(両方を実行している場合は、上記の方法と組み合わせることができます)。

var size = 0;
for (var i = 0; i < myArray.length; i ++) {
    if (typeof myArray[i] !== "undefined")
        size ++;
}

forEach上記のように使用したい場合はreduce、シムを見つける必要があります(基本的に、これらの関数を自分で実装する必要があります)。このページの2つのシムとこのページシムの大きい方をforEachお勧めします。または、それらすべてをシムするライブラリを使用することをお勧めします。reduce

于 2012-12-31T08:17:20.250 に答える