現在、コードで 2 種類の反復を使用しています。
オブジェクトの場合 (スニペット 1):
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
// do stuff with key and obj[key]
}
}
配列の場合 (スニペット 2):
for (var i=0, count=arr.length;i<count;i++) {
// do stuff with i and arr[i]
}
コードを簡素化し、オブジェクトと配列の両方に 1 つの関数を使用したいと考えています (スニペット 3):
var keys=Object.keys(arrorobj);
for (var i=0, count=keys.length;i<count;i++) {
// do stuff with keys[i] and arrorobj[keys[i]]
}
スニペット 3 がオブジェクトに適していることはわかっていますが、配列でも期待どおりに機能し、スニペット 1 と 2 の両方を置き換えますか? 特に、すべてのブラウザー (少なくとも Object.keys をサポートするブラウザー) で、スニペット 3 がキーの順序 (インデックス 0 から上) を尊重することを保証できますか?
[編集] 特にオブジェクトの深いマージにこれを使用する予定です。私の現在のコードは、各レベルでタイプ (配列、オブジェクト、またはその他) に応じて 3 つの分岐があるため、重いです。