如何在JavaScript中迭代(键、值)?

如何在JavaScript中迭代(键、值)?,javascript,dictionary,object,iterator,ecmascript-2016,Javascript,Dictionary,Object,Iterator,Ecmascript 2016,我有一本字典的格式是 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 } tl;博士 在ECMAScript 2017中,只需调用Object.entries(yourObj) 在

我有一本字典的格式是

    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
    }
tl;博士
  • 在ECMAScript 2017中,只需调用
    Object.entries(yourObj)
  • 在ECMAScript 2015中,可以使用
    Map
    s
  • 在ECMAScript 5中,这是不可能的
  • ECMAScript 2017 ECMAScript 2017引入了一个新函数。您可以根据需要使用它来迭代对象

    'use strict';
    
    const object = {'a': 1, 'b': 2, 'c' : 3};
    
    for (const [key, value] of Object.entries(object)) {
      console.log(key, value);
    }
    
    输出
    ECMAScript 2015 在ECMAScript 2015中,没有
    对象。条目
    ,但您可以使用
    映射
    对象,并使用进行迭代。引用那一页的例子

    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"]
    
    或者像这样迭代

    '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);
    }
    
    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]);
        }
    }
    
    输出 或

    输出
    ECMAScript 5: 不,这在物体上是不可能的

    您应该使用或像这样进行迭代

    '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);
    }
    
    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
    将遍历所有继承的可枚举属性

    试试这个:

    var value;
    for (var key in dictionary) {
        value = dictionary[key];
        // your code here...
    }
    
    dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}}
    for (var key in dict){
      console.log( key, dict[key] );
    }
    
    0 Object { 1="a"}
    1 Object { 2="b"}
    2 Object { 3="c"}
    
    试试这个:

    var value;
    for (var key in dictionary) {
        value = dictionary[key];
        // your code here...
    }
    
    dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}}
    for (var key in dict){
      console.log( key, dict[key] );
    }
    
    0 Object { 1="a"}
    1 Object { 2="b"}
    2 Object { 3="c"}
    

    您可以这样做:

    dictionary = {'ab': {object}, 'cd':{object}, 'ef':{object}}
    var keys = Object.keys(dictionary);
    
    for(var i = 0; i < keys.length;i++){
       //keys[i] for key
       //dictionary[keys[i]] for the value
    }
    
    dictionary={'ab':{object},'cd':{object},'ef':{object}
    var keys=Object.keys(字典);
    对于(变量i=0;i
    ES2017中指定了
    Object.entries()
    方法(现在是):

    说明:

    • Object.entries()
      接受像
      {a:1,b:2,c:3}
      这样的对象,并将其转换为键值对数组:
      [[a',1],[b',2],[c',3]

    • 表示。。。对于
      ,我们可以循环遍历这样创建的数组的条目

    • 因为我们保证每个迭代的数组项本身就是一个两项数组,所以我们可以使用它直接将变量
      key
      value
      分配给它的第一项和第二项

    使用swagger-ui.js

    你可以这样做-

    _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
        console.log(n, key);
     });
    

    我认为快速简便的方法是

    Object.entries(event).forEach(k => {
        console.log("properties ... ", k[0], k[1]); });
    
    只需查看文档即可

    作为对公认答案的改进,为了减少嵌套,您可以改为这样做,前提是不继承密钥:

    for (var key in dictionary) {
        if (!dictionary.hasOwnProperty(key)) {
            continue;
        }
        console.log(key, dictionary[key]);
    }
    

    编辑:关于
    对象的信息。hasOwnProperty
    您可以使用下面的脚本

    var obj={1:"a",2:"b",c:"3"};
    for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){
        console.log(key,value);
    }
    
    var obj={1:a',2:b',c:3};
    
    对于(var x=Object.keys(obj),i=0;i欢迎来到2020*ES6中的Drools*

    这里有一些非常古老的答案——利用解构。在我看来,这无疑是迭代对象的最好(非常可读)方法

    const myObject={
    尼克:“凯奇”,
    菲尔:“穆雷”,
    };
    Object.entries(myObject.forEach)([k,v])=>{
    log(“键:”,k)
    log(“值:”,v)
    
    })
    您可以使用JavaScript
    forEach
    循环:

    myMap.forEach((value, key) => {
        console.log('value: ', value);
        console.log('key: ', key);
    });
    

    对于(让[key,value]的Object.entries(obj))
    ,需要巴别塔。@elclars它在ES2016中,它还没有标准化:-)可能是@doo的重复。在这个问题上,它不是数组。这里有一个基本的疑问。我来到这里是想了解如何在node.js中实现这一点,node.js是服务器端的javascript。我如何知道哪个ES版本适用于我的情况。另外,对于普通的javascript用户,我知道ES版本取决于客户端的浏览器,正确的支持方式是什么?@sandePanath您可以使用一些网站,比如知道Node.js中是否支持特定的ES功能。就浏览器而言,人们通常以广泛支持的版本为目标,在本例中是ES5。除此之外,transpilers(like)帮助将ES2015+代码转换为ES5。我喜欢上面的
    Object.keys(dictionary).forEach(function(key){…
    非常可读,并且兼容。
    Object.entries(Object).forEach([key,val])=>{…};
    ECMAScript 2015解决方案抛出,但简单的ol工作得很好。更好的是:Object.entries(obj).forEach(([key,value])=>{console.log(
    ${key}${value}
    );});很好!我喜欢你的答案在ECMAscript 5中的工作方式,尽管被接受和投票最多的答案说这是不可能的。你应该得到更多的投票。#将输出#c3#1a#2b考虑到为你的答案添加解释,代码本身就没有什么帮助。此外,你可以编辑你的答案,注释并不是对答案的扩展你使用它们的方式的答案悲哀的是,人们仍然在使用Internet Explorer。我痛苦地意识到。Babel和polyfill.io解决了这个问题,但它并不令人愉快。请注意:如果你用上面的
    map
    替换
    forEach
    ,那么就有可能聚合值。
    map
    将返回所述v的列表值,从而可能以其他方式简化代码。这应该是公认的答案。公认的答案太长了。不,他们不能。
    myMap
    是一个普通对象,而不是数组。它对我有效,尽管你使用了
    Map
    对象而不是问题中使用的普通对象。哦,我明白了,我在搜索
    Map
    对象。我的不好。@SeverinToldo但它适用于es5支持的Map
    var obj={1:"a",2:"b",c:"3"};
    for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){
        console.log(key,value);
    }
    
    myMap.forEach((value, key) => {
        console.log('value: ', value);
        console.log('key: ', key);
    });