在Javascript中迭代字典

时间:2015-12-24 07:06:13

标签: javascript object dictionary

我对Javascript很新,并尝试在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' } }

2 个答案:

答案 0 :(得分:5)

这种标准方法有多种方法可以使用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 loop,但我认识的大多数人现在都不会使用它们,因为有更好的选择。



for (var prop in obj) {
  console.log("obj." + prop + " = " + obj[prop]);
}




如果您最终想要复杂化,可以使用es6 generators这样的语法来获得更类似于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

答案 1 :(得分:0)

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