Biçiminde bir sözlük var
dictionary = {0: {object}, 1:{object}, 2:{object}}
Gibi bir şey yaparak bu sözlüğü nasıl tekrarlayabilirim
for((key,value) in dictionary){
//Do stuff where key would be 0 and value would be the object
}
Biçiminde bir sözlük var
dictionary = {0: {object}, 1:{object}, 2:{object}}
Gibi bir şey yaparak bu sözlüğü nasıl tekrarlayabilirim
for((key,value) in dictionary){
//Do stuff where key would be 0 and value would be the object
}
Yanıtlar:
Map
s ile mümkündür .Hayır, nesnelerle mümkün değil.
Ya tekrar etmelisin for..in
, ya da Object.keys
böyle
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]);
}
}
Not: Yukarıdaki if
koşul, yalnızca dictionary
nesnenin kendisine ait özellikleri yinelemek istiyorsanız gereklidir . Çünkü for..in
miras alınan tüm numaralandırılabilir özellikleri tekrarlayacaktır.
Veya
Object.keys(dictionary).forEach(function(key) {
console.log(key, dictionary[key]);
});
ECMAScript 2015'te Map
nesneleri kullanabilir ve nesnelerle birlikte yineleyebilirsiniz Map.prototype.entries
. Söz konusu sayfadan örnek alıntı yapıldığında,
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"]
Veya for..of
bunun gibi tekrarla
'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);
}
[ '0', 'foo' ]
[ 1, 'bar' ]
[ {}, 'baz' ]
Veya
for (const [key, value] of myMap.entries()) {
console.log(key, value);
}
0 foo
1 bar
{} baz
ECMAScript 2017 yeni bir işlev getirecek Object.entries
. Nesneyi istediğiniz gibi yinelemek için bunu kullanabilirsiniz.
'use strict';
const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
a 1
b 2
c 3
Object.keys(dictionary).forEach(function(key) {…
çok okunabilir ve uyumlu.
Object.entries(object).forEach(([key, val]) => {...});
Object.entries()
Yöntem ES2017 belirtilen edilmiştir (ve tüm modern tarayıcılarda desteklenir ):
for (const [ key, value ] of Object.entries(dictionary)) {
// do something with `key` and `value`
}
Açıklama:
Object.entries()
gibi bir nesne alır { a: 1, b: 2, c: 3 }
ve anahtar değer çiftleri bir dizi haline dönüşür: [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
.
İle for ... of
oluşturulan dizinin girişleri üzerinde döngü.
Bu şekilde yinelenen dizi öğelerinin her birinin kendisinin iki girişli bir dizi olduğu garanti edildiğinden, doğrudan değişkenleri atamak ve birinci ve ikinci öğesine yıkım işlevini kullanabiliriz .key
value
Bunun gibi bir şey yapabilirsiniz:
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
}
2020'YE HOŞGELDİNİZ * ES6'daki Drools *
Burada oldukça eski bazı cevaplar var - yıkımdan yararlanın. Kanımca bu bir nesneyi yinelemenin en güzel (çok okunabilir) yoludur.
Object.entries(myObject).forEach(([k,v]) => {
console.log("The key: ",k)
console.log("The value: ",v)
})
forEach
ile map
şeyden önce, agrega değerlere sonra mümkündür. map
daha sonra söz konusu değerlerin bir listesini döndürür, böylece kodu başka şekillerde basitleştirebilir.
Bence hızlı ve kolay yol
Object.entries(event).forEach(k => {
console.log("properties ... ", k[0], k[1]); });
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries belgelerine bakın
${key} ${value}
);});
Aşağıdaki komut dosyasını kullanabilirsiniz.
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);
}
çıkışlar
1 a
2 b
c 3
Kabul edilen yanıtta bir iyileştirme olarak, iç içe geçirmeyi azaltmak için, anahtarın miras alınmaması şartıyla bunu yapabilirsiniz:
for (var key in dictionary) {
if (!dictionary.hasOwnProperty(key)) {
continue;
}
console.log(key, dictionary[key]);
}
Düzenleme: burada hakkında bilgiObject.hasOwnProperty
for (let [key, value] of Object.entries(obj))
Babil'e ihtiyacım var.