マップのすべての値を反復処理したい。 すべてのキーを繰り返す が可能であることを知っています。しかし、値を直接反復処理することは可能ですか?
var map = { key1 : 'value1', key2 : 'value2' }
for (var key in map) { ...} // iterates over keys
それは地図ではありません。単にObject
です。
編集:Amitがコメントで指摘したように、以下のコードはOPよりも劣っています。
実際にkeysを繰り返し処理することで、「値を反復処理」できます。
var value;
Object.keys(map).forEach(function(key) {
value = map[key];
console.log(value);
});
以前はこのように繰り返していました。最適化されたコードであるかどうかはわかりませんが、私にとってはうまくいきます。
for (let [k, v] of myMap) {
console.log("Key: " + k);
console.log("Value: " + v);
}
お役に立てれば :)
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
(ただしnotWeakMap
は反復可能ではないため)やSet
など、必要な機能を提供する他の組み込み関数があります(ただし、これらはすべてではありません)まだブラウザ)。
nderscore.jsおよび各関数 を使用できます。
_.each({key1: "value1", key2: "value2"}, function(value) {
console.log(value);
});
キーと値ごとに複雑な(ネストされた)オブジェクトに深く反復する場合は、-を使用して行うことができます 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])
}
})
}