迭代对象的值

时间:2015-11-26 20:32:22

标签: javascript dictionary

我想迭代地图的所有值。 我知道iterate over all keys可以。 但是可以直接迭代值吗?

 var map = { key1 : 'value1', key2 : 'value2' }
 for (var key in map) { ...} // iterates over keys

8 个答案:

答案 0 :(得分:48)

它不是地图。它只是一个Object

编辑: 以下代码比OP更糟糕,正如Amit在评论中指出的那样。

你可以"迭代价值"通过实际迭代

var value;
Object.keys(map).forEach(function(key) {
    value = map[key];
    console.log(value);
});

答案 1 :(得分:8)

从某种意义上来说,我认为你打算在ES5或ES2015中,不,不是没有你的工作。

在ES2016中,可能是object.values

请注意,JavaScript中的数组实际上是一个从整数到值的映射,JavaScript数组中的值可以直接枚举。

['foo', 'bar'].forEach(v => console.log(v)); // foo bar

此外,在ES2015中,您可以通过在名为Symbol.iterator的属性上放置函数来使对象可迭代:

var obj = { 
    foo: '1', 
    bar: '2',
    bam: '3',
    bat: '4',
};

obj[Symbol.iterator] = iter.bind(null, obj);

function* iter(o) {
    var keys = Object.keys(o);
    for (var i=0; i<keys.length; i++) {
        yield o[keys[i]];
    }
}

for(var v of obj) { console.log(v); } // '1', '2', '3', '4'

此外,根据其他答案,还有其他内置插件可提供您想要的功能,例如Map(但 WeakMap,因为它不可迭代)例如Set(但这些在所有浏览器中都不存在)。

答案 2 :(得分:5)

我以前经常这样迭代。不知道它是否是优化的代码,但对我有用。

for (let [k, v] of myMap) {
    console.log("Key: " + k);
    console.log("Value: " + v);
}

希望这会有所帮助:)

答案 3 :(得分:2)

EcmaScript 2017引入了Object.entries,使您可以迭代值和键。 Documentation

var map = { key1 : 'value1', key2 : 'value2' }

for (let [key, value] of Object.entries(map)) {
    console.log(`${key}: ${value}`);
}

结果将是:

  

key1:value1
  key2:value2

答案 4 :(得分:1)

不,没有直接的方法来处理对象。

Map类型确实有一个values()方法,它返回值的迭代器

答案 5 :(得分:1)

遇到此问题的任何人,我都设法通过执行以下操作在 njs ( nginx js ) 中解决了此问题:

df=df.rename(columns={'id':'source_id'})
g_cols=['source_id','fn','ln','email','dob']
cols=df.columns[~df.columns.isin(g_cols)]
out=(df.groupby(g_cols)[cols]
       .apply(lambda x:x.to_dict('records'))
       .reset_index(name='address').to_dict('records'))

答案 6 :(得分:0)

您可以使用underscore.js and the each function

_.each({key1: "value1", key2: "value2"}, function(value) {
  console.log(value);
});

答案 7 :(得分:0)

如果要针对每个键和值 深度迭代到复杂的(嵌套的)对象中,可以使用Object.keys()

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {

    console.log(`key: ${key}, value: ${obj[key]}`)

    if (typeof obj[key] === 'object') {
            iterate(obj[key])
        }
    })
}