我有一本字典,其格式为
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
}
我有一本字典,其格式为
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
}
Answers:
Map
s。不,它不能用于对象。
您应该像这样用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
上面的条件是必要的,只有当你想要遍历它们的属性dictionary
的对象是自己的。因为for..in
将遍历所有继承的可枚举属性。
要么
Object.keys(dictionary).forEach(function(key) {
console.log(key, dictionary[key]);
});
在ECMAScript 2015中,您可以使用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 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
Object.keys(dictionary).forEach(function(key) {…
可读性强并且兼容的软件。
Object.entries(object).forEach(([key, val]) => {...});
该Object.entries()
方法已在ES2017中指定(并且在所有现代浏览器中都支持):
for (const [ key, value ] of Object.entries(dictionary)) {
// do something with `key` and `value`
}
说明:
Object.entries()
接受一个类似的对象{ a: 1, b: 2, c: 3 }
,并将其转换为键值对数组:[ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
。
随着for ... of
我们可以遍历所谓创建的数组的条目。
由于我们保证,每个迭代使阵列项目本身是一个双项阵列,我们可以用解构直接分配变量key
,并value
在其第一和第二项。
欢迎来到2020年* ES6中的流口水*
这里有一些相当老的答案-利用解构的优势。在我看来,这无疑是迭代对象的最佳方法(可读性最高)。
Object.entries(myObject).forEach(([k,v]) => {
console.log("The key: ",k)
console.log("The value: ",v)
})
forEach
为map
上述内容,则可以汇总值。map
然后将返回所述值的列表,从而可能以其他方式简化代码。
我认为快速简便的方法是
Object.entries(event).forEach(k => {
console.log("properties ... ", k[0], k[1]); });
只需查看文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
${key} ${value}
);});
for (let [key, value] of Object.entries(obj))
,需要通天塔。