[英]Iterating over a dictionary in Javascript
我对Java相当陌生,并尝试遍历Javascript中的字典。 我可以在python中轻松地做到这一点:
for key, value in dict.items():
//do something
有没有类似的方法可以在Javascript中执行相同的操作?
我试图迭代的结构是:
{ 'meta.num_prod': 4,
'meta.crtd_on': '2015-12-24T06:27:18.850Z',
'meta.last_upd': '2015-12-24T06:46:12.888Z',
's.103114':
{ prod_id: '103114',
product_type: 'normal',
last_updated: '2015-12-24T06:28:44.281Z',
qty: 3,
created_on: '2015-12-24T06:27:18.850Z' },
's.103553':
{ prod_id: '103553',
product_type: 'normal',
last_updated: '2015-12-24T06:46:12.888Z',
qty: 1,
created_on: '2015-12-24T06:46:12.888Z' } }
有一种方法可以使用Object.keys来实现这一标准方式:
你可以做
Object.keys(obj).forEach(function(key) { console.log(key + " " + obj[key]); });
如果您使用的是jQuery,则可以使用$ .each()方法,如下所示:
$.each({ name: "John", lang: "JS" }, function( k, v ) { console.log( "Key: " + k + ", Value: " + v ); });
或者,您也可以使用for ... in循环 ,但是由于更好的选择,如今我认识的大多数人都不使用它们。
for (var prop in obj) { console.log("obj." + prop + " = " + obj[prop]); }
如果最终想要使事情复杂化,则可以使用es6生成器,像这样来获得类似于python的语法:
// The asterisk after `function` means that
// `objectEntries` is a generator
function* objectEntries(obj) {
let propKeys = Reflect.ownKeys(obj);
for (let propKey of propKeys) {
// `yield` returns a value and then pauses
// the generator. Later, execution continues
// where it was previously paused.
yield [propKey, obj[propKey]];
}
}
let jane = { first: 'Jane', last: 'Doe' };
for (let [key,value] of objectEntries(jane)) {
console.log(`${key}: ${value}`);
}
// Output:
// first: Jane
// last: Doe
EcmaScript 2017具有Object.entries
,在这种情况下非常有用。 MDN
const obj = { 'meta.num_prod': 4, 'meta.crtd_on': '2015-12-24T06:27:18.850Z', 'meta.last_upd': '2015-12-24T06:46:12.888Z', } Object.entries(obj).forEach(function([key, value]) { console.log(`${key} ${value}`); });
输出:
meta.num_prod 4
meta.crtd_on 2015-12-24T06:27:18.850Z
meta.last_upd 2015-12-24T06:46:12.888Z
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.