如何在 JavaScript 中遍历键和值(keys, values)?
如何在 JavaScript 中遍历键和值(keys, values)?
这个问题已经有答案了:
如何通过循环或枚举JavaScript对象?社区已经审核过是否重新打开这个问题,9天前,并将其保持关闭:
原关闭原因未解决
我有一个格式为
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 }
admin 更改状态以发布 2023年5月23日
摘要
- 在 ECMAScript 2017 中,只需调用
Object.entries(yourObj)
。 - 在 ECMAScript 2015 中,可以使用
Map
。 - 在 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..in
或 Object.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
条件只有在想要迭代字典对象自己的属性时才是必要的。因为for...in
将迭代所有继承的可枚举属性。
或者
Object.keys(dictionary).forEach(function(key) { console.log(key, dictionary[key]); });