Object.entries()
öğeleri [key, value]
doğrudan üzerinde bulunan numaralandırılabilir özellik çiftlerine karşılık gelen diziler olan bir dizi döndürür object
. Özelliklerin sırası, nesnenin özellik değerleri üzerinde el ile döngü yapılarak verilenle aynıdır.
- https://developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Tanım
Object.entries
İşlevini verir neredeyse tuşları dışında size soran birileri tam çıkış numaralar yerine dizelerdir.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
console.log(Object.entries(obj));
Anahtarların sayı olması gerekiyorsa, sonucu, her çiftteki anahtarı ondan zorlanan bir sayıyla değiştiren geri arama işleviyle yeni bir diziye eşleyebilirsiniz.
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(input);
return entries.map(entry => Object.assign(entry, { 0: +entry[0] }));
}
console.log(toNumericPairs(obj));
Bir ok işlevi kullanın ve Object.assign
yukarıdaki örnekte harita geri çağırma Object.assign
için, atanan nesneyi döndüren gerçeği kullanarak tek bir komutta tutabilirim ve tek bir komut ok işlevinin dönüş değeri komutun sonucudur.
Bu şuna eşittir:
entry => {
entry[0] = +entry[0];
return entry;
}
Yorumlarda @TravisClarke tarafından belirtildiği gibi, harita işlevi şu şekilde kısaltılabilir:
entry => [ +entry[0], entry[1] ]
Ancak bu, varolan diziyi yerinde değiştirmek yerine her bir anahtar / değer çifti için yeni bir dizi oluşturacak ve dolayısıyla oluşturulan anahtar / değer çifti dizilerinin sayısını iki katına çıkaracaktır. Orijinal giriş dizisine hala erişilebilir olsa da, bu dizi ve girdileri çöp toplanmaz.
Şimdi, yerinde yöntemimizi kullanmak, anahtar / değer çiftlerini (giriş ve çıkış dizileri) tutan iki dizi kullanıyor olsa da, toplam dizi sayısı yalnızca bir tane değişir. Girdi ve çıktı dizileri aslında dizilerle dolu değildir, aksine dizilere yapılan göndermeler ve bu başvurular bellekte önemsiz bir alan kaplar.
- Her bir anahtar / değer çiftinin yerinde değiştirilmesi, ihmal edilebilir miktarda bellek büyümesine neden olur, ancak birkaç karakter daha yazmayı gerektirir.
- Her bir anahtar / değer çifti için yeni bir dizi oluşturmak, gereken bellek miktarını iki katına çıkarır, ancak birkaç daha az karakter girilmesini gerektirir.
Bir adım daha ileri gidebilir ve girişler dizisini yeni bir diziye eşlemek yerine yerinde değiştirerek büyümeyi tamamen ortadan kaldırabilirsiniz:
const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};
const toNumericPairs = input => {
const entries = Object.entries(obj);
entries.forEach(entry => entry[0] = +entry[0]);
return entries;
}
console.log(toNumericPairs(obj));
NaN
bunun yerine geri döner . Dizeleri anahtarlarınız olarak kullanmak isterseniz , yanıtını olarak[Number(key), obj[key]]
değiştirin[key, obj[key]]
veyaObject.entries
yanıtlarında önerilen @Pila'yı kullanın