Jika saya memiliki benda seperti:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Jika saya tidak tahu sebelumnya bahwa daftar naik ke 'c', selain perulangan melalui objek, apakah ada cara untuk mendapatkan item terakhir di objek (misalnya 'carrot'
)?
javascript
object
sprugman
sumber
sumber
Jawaban:
Tidak. Pesanan tidak dijamin di JSON dan sebagian besar struktur data nilai kunci lainnya, jadi oleh karena itu item terakhir terkadang bisa
carrot
dan di lain waktu dapatbanana
dan seterusnya. Jika Anda perlu mengandalkan pemesanan, taruhan terbaik Anda adalah menggunakan array. Kekuatan struktur data nilai-kunci terletak pada pengaksesan nilai menurut nilainyakeys
, bukan pada kemampuan mendapatkannth
item objek.sumber
[]
itu sebenarnya adalah objek. JS tidak memiliki array asosiatif seperti itu, array memiliki akses dan urutan yang diindeks; objek memiliki akses properti asosiatif, tidak berurutan.Ya, ada cara menggunakan
Object.keys(obj)
. Dijelaskan di halaman ini :var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Jika Anda ingin mendapatkan nilai objek terakhir, Anda dapat melakukan ini:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
sumber
Object.keys
berfungsi dengan baik. Hanya harus menemukan cara untuk membuatnya berfungsi di IE8 dan 7, karena itu hanya muncul di IE9.Object.keys
berulang kali hanya untuk menemukan bahwa properti sebenarnya dipesan secara acak. Urutan properti sebenarnya berbeda dari apa yang ditampilkan saat login ke konsol browser Anda. Saat masuk ke konsol browser, properti secara otomatis disusun ulang dan ditampilkan menurut abjad / numerik, yang pasti menyebabkan kebingungan.last = Object.keys(obj)[Object.keys(obj).length-1];
dimana obj adalah objek anda
sumber
'c'
dalam kasus ini) tetapi pertanyaannya ditulis dengan cara yang menyiratkan bahwa penanya mencari nilai terakhir ('carrot'
). Ini juga tidak benar-benar menambahkan apa pun yang belum tercakup oleh jawaban Kristina Stefanovavar myObj = {a: 1, b: 2, c: 3}, lastProperty; for (lastProperty in myObj); lastProperty; //"c";
sumber: http://javascriptweblog.wordpress.com
sumber
for (firstProperty in myObj) { break; };
Solusi menggunakan sintaks tugas destrukturisasi ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var { [Object.keys(temp).pop()]: lastItem } = temp; console.info(lastItem); //"carrot"
sumber
Anda bisa mencobanya. Ini akan menyimpan item terakhir. Di sini perlu mengubah obj menjadi array. Kemudian gunakan
pop()
fungsi array yang akan mengembalikan item terakhir dari array yang dikonversi.var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var last = Object.keys(obj).pop(); console.log(last); console.log(obj[last]);
sumber
Adapun urutan properti objek di Javascript, saya hanya akan menautkan ke jawaban ini:
Urutan elemen dalam loop "untuk (… in…)"
Secara khusus:
Jadi setiap jawaban lain di sini benar, tidak ada jaminan resmi untuk memesan properti objek. Namun dalam praktiknya ada (kecuali bug yang secara alami dapat mengacaukan bahkan perilaku set-in-stone yang ditentukan secara resmi).
Selanjutnya, urutan pencacahan de-facto properti objek kemungkinan besar akan dikodifikasi dalam spesifikasi EMCAScript di masa mendatang.
Namun, saat ini saya tidak akan menulis kode seputar ini, terutama karena tidak ada alat bawaan untuk membantu menangani pesanan properti objek. Anda dapat menulis milik Anda sendiri, tetapi pada akhirnya Anda akan selalu mengulang setiap properti dalam suatu objek untuk menentukan posisinya.
Dengan demikian, jawaban atas pertanyaan Anda adalah Tidak , tidak ada cara lain selain mengulang-ulang suatu objek.
sumber
Gunakan larik, bukan literal objek, jika keteraturan itu penting.
list = ['apple', 'banana', 'carrot'];
Atau semacamnya
dict = { 'a' : ['apple', 'awesome'], 'b' : ['best friend'] };
Atau bahkan..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Kunci untuk
dict
sama sekali tidak dijamin akan teratur.sumber
Jawaban lain membuat saya terlalu rumit.
let animals = { a: 'dog', b: 'cat', c: 'bird' } let lastKey = Object.keys(animals).pop() let lastValue = animals[Object.keys(animals).pop()]
sumber
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'
sumber
Anda juga bisa menggunakan
Object.values()
metode ini:Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
sumber
Objek peta di JavaScript . Ini sudah berumur sekitar 3 tahun sekarang. Struktur data peta ini mempertahankan urutan item yang dimasukkan. Dengan mengambil item terakhir ini sebenarnya akan menghasilkan item terbaru yang dimasukkan ke dalam Peta
sumber
Jadikanlah
obj
objek Anda. Jalankan:(_ => _[Object.keys(_).pop()])( obj )
sumber
jika maksud Anda mendapatkan kunci terakhir menurut abjad, Anda dapat (dijamin):
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'
sumber