2016-01-21 19 views
61

私はjavascriptで(キー、値)を反復処理する方法は?

for((key,value) in dictionary){ 
    //Do stuff where key would be 0 and value would be the object 
} 
+1

''(Object.entriesの[キー、値](OBJ)しましょう)について、バベルが必要です。 – elclanrs

+3

[可能な重複](http://stackoverflow.com/questions/7241878/for-in-loops-in-javascript-key-value-pairs) – Tholle

+0

@elclanrs ES2016で、それはまだ標準化されていません:-) – thefourtheye

答えて

100

TLような何かをすることによって、この辞書を反復処理するにはどうすればよい

dictionary = {0: {object}, 1:{object}, 2:{object}} 

の形式を持っている辞書を持って、ECMAScriptの5博士

  1. 、 それは不可能。
  2. ECMAScript 2015では、Mapで可能です。
  3. ECMAScript 2017では、容易に利用できます。

のECMAScript 5:

いや、オブジェクトとそのことはできません。

あなたはこの

for (var key in dictionary) { 
    // check if the property/key is defined in the object itself, not in parent 
    if (dictionary.hasOwnProperty(key)) {   
     console.log(key, dictionary[key]); 
    } 
} 

ノートのように、for..in、またはObject.keysを繰り返す必要があり、次のいずれか上記if条件はあなたがdictionaryオブジェクトの非常に自身の性質を反復する場合にのみ、必要です。 for..inは、継承されたすべてのプロパティを反復処理するためです。 ECMAScriptの2015年に

それとも

Object.keys(dictionary).forEach(function(key) { 
    console.log(key, dictionary[key]); 
}); 

のECMAScript 2015

、あなたはMapオブジェクトを使用してMap.prototype.entriesでそれらを繰り返すことができます。この

'use strict'; 

var myMap = new Map(); 
myMap.set("0", "foo"); 
myMap.set(1, "bar"); 
myMap.set({}, "baz"); 

for (const entry of myMap.entries()) { 
    console.log(entry); 
} 

出力のように、そのページから

var myMap = new Map(); 
myMap.set("0", "foo"); 
myMap.set(1, "bar"); 
myMap.set({}, "baz"); 

var mapIter = myMap.entries(); 

console.log(mapIter.next().value); // ["0", "foo"] 
console.log(mapIter.next().value); // [1, "bar"] 
console.log(mapIter.next().value); // [Object, "baz"] 

を例を引用あるいはfor..ofで反復

[ '0', 'foo' ] 
[ 1, 'bar' ] 
[ {}, 'baz' ] 

それとも

for (const [key, value] of myMap.entries()) { 
    console.log(key, value); 
} 

出力

0 foo 
1 bar 
{} baz 

のECMAScript 2017

のECMAScript 2017は、新しい機能Object.entriesを導入します。これを使用して、必要に応じてオブジェクトを反復することができます。

'use strict'; 

const object = {'a': 1, 'b': 2, 'c' : 3}; 
for (const [key, value] of Object.entries(object)) { 
    console.log(key, value); 
} 

出力

a 1 
b 2 
c 3 
+2

ECMA 2015のマップ機能は素晴らしいです。あなたの投稿を最新の状態にしていただきありがとうございます。 +1。 – RBT

4

はこれを試してみてください:

var value; 
for (var key in dictionary) { 
    value = dictionary[key]; 
    // your code here... 
} 
13

はこれを試してみてください:

dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}} 
for (var key in dict){ 
    console.log(key, dict[key]); 
} 

0 Object { 1="a"} 
1 Object { 2="b"} 
2 Object { 3="c"} 
0

あなたはこのような何かを行うことができます。

dictionary = {'ab': {object}, 'cd':{object}, 'ef':{object}} 
var keys = Object.keys(dictionary); 

for(var i = 0; i < keys.length;i++){ 
    //keys[i] for key 
    //dictionary[keys[i]] for the value 
} 
12

ES2017(そうbrowser supportに注意してください)質問のfirst commentで言及Object.entries()方法が標準化されているので:

for (const [ key, value ] of Object.entries(dictionary)) { 
    // do something with `key` and `value` 
} 

説明:

  • Object.entries()のようなオブジェクトを受け取り{ a: 1, b: 2, c: 3 }を作成し、それをキーと値のペアの配列に変換します。付き

  • 我々は、反復配列項目のそれぞれが別の2エントリアレイである、我々はdestructuringを使用することができますを保証されているので、我々はその作成された配列

  • のすべてのエントリをループすることができます変数keyvalueを1番目と2番目の項目に直接割り当てます。

    あなたがこれを行うことができ威張っ-ui.jsに

    を使用して

1

-

_.forEach({ 'a': 1, 'b': 2 }, function(n, key) { 
    console.log(n, key); 
}); 
関連する問題