Şunun gibi bir nesnem varsa:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Listenin 'c'ye kadar çıktığını önceden bilmiyorsam, nesnede döngü yapmaktan başka, nesnedeki son öğeyi almanın bir yolu var 'carrot'
mı (örneğin )?
Şunun gibi bir nesnem varsa:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Listenin 'c'ye kadar çıktığını önceden bilmiyorsam, nesnede döngü yapmaktan başka, nesnedeki son öğeyi almanın bir yolu var 'carrot'
mı (örneğin )?
Yanıtlar:
No al bu nedenle son öğe bazen olabilir, JSON ve diğer birçok anahtar-değer veri yapılarında garanti edilmez carrot
ve diğer zamanlarda olması banana
vb vb. Eğer varsa gerek sipariş güvenmek, en iyi bahis diziler ile gitmektir. Anahtar-değer veri yapılarının gücü , nesnenin öğesini keys
elde edememede değil, değerlere onların tarafından erişilmesinde yatar nth
.
[]
bile, bu gerçekten bir nesnedir. JS'de bu tür ilişkilendirilebilir diziler yoktur, diziler indekslenmiş erişime ve sıraya sahiptir; nesnelerin sıralı olmayan ilişkisel özellik erişimi vardır.
Evet, kullanmanın bir yolu var Object.keys(obj)
. Bu sayfada açıklanmıştır :
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Son nesnenin değerini almak istiyorsanız, şunu yapabilirsiniz:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
Object.keys
harika çalışıyor. IE8 ve 7'de çalışmasını sağlamanın bir yolunu bulmalıyım çünkü bu sadece IE9'da ortaya çıktı.
Object.keys
Sadece mülklerin gerçekten rastgele sipariş edildiğini bulmak için tekrar tekrar kullanmayı denedim . Gerçek özellik sırası, tarayıcı konsolunuzda oturum açıldığında görüntülenenden farklıdır. Tarayıcı konsolunda oturum açıldığında, özellikler otomatik olarak yeniden sıralanır ve alfabetik / sayısal olarak görüntülenir, bu da kesinlikle bazı karışıklıklara neden olur.
last = Object.keys(obj)[Object.keys(obj).length-1];
obj nerede senin nesnen
'c'
bu durumda) ancak soru soruyu soranın son değeri ( 'carrot'
) aradığını ima edecek şekilde ifade edilir . Bu aynı zamanda, Kristina Stefanova'nın cevabında
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
for (firstProperty in myObj) { break; };
ES6'nın yıkıcı atama sözdizimini kullanan çözüm:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
Bunu deneyebilirsin. Bu son öğeyi saklayacaktır. Burada obj'i diziye çevirmeniz gerekiyor. Ardından pop()
, dönüştürülen diziden son öğeyi döndürecek dizi işlevini kullanın .
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
Javascript'te nesne özelliklerinin sıralanmasına gelince, sadece bu yanıta bağlanacağım:
"For (… in…)" döngüsünde öğeler sırası
Özellikle:
ECMAScript'in tüm modern uygulamaları, tanımlandıkları sırayla nesne özellikleriyle yinelenir
Yani buradaki diğer her cevap doğrudur, mülklere itiraz etmek için resmi garantili bir emir yoktur. Bununla birlikte, pratikte var (resmi olarak belirlenmiş davranışı bile doğal olarak bozabilecek herhangi bir böcek yok).
Ayrıca, nesne özelliklerinin fiili numaralandırma sırasının gelecekteki EMCAScript spesifikasyonlarında kodlanması muhtemeldir.
Yine de, şu anda bunun etrafında kod yazmazdım, çünkü çoğunlukla nesne özellik sırasını ele almaya yardımcı olacak yerleşik araçlar yok. Kendinizinkini yazabilirsiniz, ancak sonunda konumunu belirlemek için her zaman bir nesnedeki her özellik üzerinde döngü yaparsınız.
Sorunuzun cevabı Hayır olduğu için , bir nesnenin içinden geçmekten başka yolu yoktur.
Sıra önemliyse, bir nesne değişmezi değil, bir dizi kullanın.
list = ['apple', 'banana', 'carrot'];
Veya benzeri bir şey
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
Ya da..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Anahtarlarının dict
sıralı olduğu hiç garanti edilmez.
JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'
JavaScript'te harita nesnesi . Bu zaten yaklaşık 3 yaşında. Bu harita veri yapısı, öğelerin eklendiği sırayı korur. Bu geri alma ile son öğe aslında Haritaya eklenen son öğe ile sonuçlanacaktır
Izin obj
senin nesne. Yürütme:
(_ => _[Object.keys(_).pop()])( obj )
alfabetik olarak son anahtarı almayı kastediyorsanız, şunları yapabilirsiniz (garantili):
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'