2016-05-02 17 views
0

forEach配列メソッドでオブジェクトを反復しようとしています。なぜオブジェクトごとに反復処理するのですか

var obj = {"a":1, "b":2, "c":3}; 
[].forEach.call(obj, function(n, key) { 
    console.log(key, n) 
}) 

印刷しなければならない

:1

B:2

C:それはデバッガにundefinedを返して3

これは私が人為的にも動作しません。 objに長さプロパティを追加する

obj.length = 3; 

どのようにこのオブジェクト配列を作成するのですか?オブジェクトのforeachのような配列メソッドを呼び出すことができます。私は、このシナリオで何が間違っているのか疑問に思っていただけで、オブジェクトを反復処理する他の方法があることを知っています。

+0

'Array.forEach'は、配列のために意味される、または少なくとも長さで反復可能な配列のようなオブジェクトで呼び出されるので。代わりに 'for-in'ループを使用してください。 – adeneo

+1

'Object.keys(obj).forEach(function(key){console.log(key、obj [key]);}); ' –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in – j08691

答えて

1

Array.prototype.forEach()は、配列でのみ動作し、オブジェクトでは動作しません。あなたは、オブジェクト自身の列挙プロパティをループにObject.keys()を使用することができます。

var obj = {"a":1, "b":2, "c":3}; 

Object.keys(obj).forEach(function(key) { 
    console.log(key, obj[key]); 
}); 
関連する問題