如何在 JavaScript 中迭代(键、值)?

新手上路,请多包涵

我有一本格式为

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

我如何通过执行类似的操作来遍历这本字典

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

原文由 nbroeking 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 731
2 个回答

tl;博士

  1. 在 ECMAScript 2017 中,只需调用 Object.entries(yourObj)

  2. 在 ECMAScript 2015 中,可以使用 Map s。

  3. 在 ECMAScript 5 中,这是不可能的。

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


ECMAScript 2015

在 ECMAScript 2015 中,没有 Object.entries ,但您可以使用 Map 对象并使用 Map.prototype.entries 对其进行迭代。引用该页面中的示例,

 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 迭代,像这样

'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);
 }

输出

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

或者

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

输出

0 foo
 1 bar
 {} baz


ECMAScript 5:

不,对象不可能。

您应该像这样使用 for..inObject.keys 进行迭代

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]);
 }
 }

注意: 上面的 if 条件只有在你想遍历 dictionary 对象自己的属性时才是必要的。因为 for..in 将遍历所有继承的可枚举属性。

或者

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

原文由 thefourtheye 发布,翻译遵循 CC BY-SA 4.0 许可协议

试试这个:

 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"}

原文由 alex10 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题