簡體   English   中英

遍歷Javascript中的字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM