หากฉันมีวัตถุเช่น:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
ถ้าฉันไม่รู้ล่วงหน้าว่ารายการขึ้นไปที่ 'c' นอกเหนือจากการวนลูปผ่านวัตถุมีวิธีรับรายการสุดท้ายในวัตถุ (เช่น'carrot'
) หรือไม่?
หากฉันมีวัตถุเช่น:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
ถ้าฉันไม่รู้ล่วงหน้าว่ารายการขึ้นไปที่ 'c' นอกเหนือจากการวนลูปผ่านวัตถุมีวิธีรับรายการสุดท้ายในวัตถุ (เช่น'carrot'
) หรือไม่?
คำตอบ:
เลขที่สั่งซื้อจะไม่รับประกันใน JSON และมากที่สุดในโครงสร้างข้อมูลที่สำคัญที่มีมูลค่าอื่น ๆ ดังนั้นจึงรายการสุดท้ายที่บางครั้งอาจจะเป็นcarrot
และในเวลาอื่น ๆ จะเป็นbanana
และอื่น ๆ หากคุณจำเป็นต้องพึ่งพาการสั่งซื้อทางออกที่ดีที่สุดคือการใช้อาร์เรย์ พลังของโครงสร้างข้อมูลคีย์ - ค่าอยู่ที่การเข้าถึงค่าโดยพวกเขาkeys
ไม่สามารถรับnth
ไอเท็มของอ็อบเจ็กต์ได้
[]
แต่ก็เป็นวัตถุจริงๆ JS ไม่มีอาร์เรย์ที่เชื่อมโยงเช่นนี้อาร์เรย์มีดัชนีการเข้าถึงและลำดับ อ็อบเจ็กต์มีการเข้าถึงคุณสมบัติที่เชื่อมโยงไม่ใช่ลำดับ
ใช่มีวิธีการใช้Object.keys(obj)
. มีคำอธิบายในหน้านี้ :
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
หากคุณต้องการรับค่าของวัตถุสุดท้ายคุณสามารถทำได้:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
Object.keys
งานได้ดี เพียงแค่ต้องหาวิธีที่จะทำให้มันทำงานบน IE8 และ 7 เพราะมันปรากฏบน IE9 เท่านั้น
Object.keys
ซ้ำแล้วซ้ำเล่าเพื่อพบว่าคุณสมบัติถูกสั่งแบบสุ่มจริงๆ ลำดับคุณสมบัติจริงแตกต่างจากที่แสดงเมื่อเข้าสู่คอนโซลเบราว์เซอร์ของคุณ เมื่อเข้าสู่คอนโซลเบราว์เซอร์คุณสมบัติจะถูกจัดเรียงใหม่โดยอัตโนมัติและแสดงตามตัวอักษร / ตัวเลขซึ่งทำให้เกิดความสับสนอย่างแน่นอน
last = Object.keys(obj)[Object.keys(obj).length-1];
โดยที่ obj เป็นวัตถุของคุณ
'c'
ในกรณีนี้) แต่คำถามถูกใช้ในลักษณะที่แสดงว่าผู้ถามกำลังมองหาค่าสุดท้าย ( 'carrot'
) นอกจากนี้ยังไม่ได้เพิ่มสิ่งที่ยังไม่ได้ครอบคลุมคำตอบของ Kristina Stefanova อีกด้วย
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
แหล่งที่มา: http://javascriptweblog.wordpress.com
for (firstProperty in myObj) { break; };
วิธีแก้ไขโดยใช้ไวยากรณ์การกำหนดการทำลายของ ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
คุณสามารถลองสิ่งนี้ สิ่งนี้จะจัดเก็บรายการสุดท้าย ที่นี่ต้องแปลง obj เป็นอาร์เรย์ จากนั้นใช้pop()
ฟังก์ชันอาร์เรย์ที่จะส่งคืนรายการสุดท้ายจากอาร์เรย์ที่แปลงแล้ว
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
สำหรับการจัดลำดับคุณสมบัติของวัตถุใน Javascript ฉันจะเชื่อมโยงไปยังคำตอบนี้:
เรียงลำดับองค์ประกอบในลูป "for (… in …)"
โดยเฉพาะ:
การนำ ECMAScript ไปใช้งานสมัยใหม่ทั้งหมดจะวนซ้ำผ่านคุณสมบัติของอ็อบเจ็กต์ตามลำดับที่กำหนดไว้
ดังนั้นคำตอบอื่น ๆ ที่นี่จึงถูกต้องไม่มีคำสั่งรับรองอย่างเป็นทางการในการคัดค้านคุณสมบัติ อย่างไรก็ตามในทางปฏิบัติมี (ยกเว้นข้อบกพร่องใด ๆ ที่สามารถทำให้พฤติกรรมที่ระบุไว้อย่างเป็นทางการได้แม้กระทั่งการตั้งค่าในหิน)
นอกจากนี้ลำดับการแจงนับโดยพฤตินัยของคุณสมบัติออบเจ็กต์ยังมีแนวโน้มที่จะถูกเข้ารหัสในข้อกำหนด EMCAScript ในอนาคต
ถึงกระนั้นในเวลานี้ฉันจะไม่เขียนโค้ดในส่วนนี้ส่วนใหญ่เป็นเพราะไม่มีเครื่องมือในตัวที่จะช่วยจัดการกับลำดับคุณสมบัติของอ็อบเจ็กต์ คุณสามารถเขียนของคุณเองได้ แต่สุดท้ายแล้วคุณจะวนซ้ำคุณสมบัติแต่ละรายการในวัตถุเพื่อกำหนดตำแหน่งของมัน
ดังนั้นคำตอบสำหรับคำถามของคุณคือไม่ไม่มีทางอื่นนอกจากการวนซ้ำวัตถุ
ใช้อาร์เรย์ไม่ใช่อ็อบเจ็กต์ลิเทอรัลหากลำดับมีความสำคัญ
list = ['apple', 'banana', 'carrot'];
หรือสิ่งที่ชอบ
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
หรือแม้กระทั่ง..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
dict
ไม่รับประกันว่าคีย์สำหรับจะเป็นไปตามลำดับ
คำตอบอื่น ๆ มีความซับซ้อนสำหรับฉัน
let animals = {
a: 'dog',
b: 'cat',
c: 'bird'
}
let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]
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'
คุณยังสามารถใช้Object.values()
วิธีการ:
Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
แผนที่วัตถุใน JavaScript ตอนนี้ก็ประมาณ 3 ขวบแล้ว โครงสร้างข้อมูลแผนที่นี้ยังคงรักษาลำดับในการแทรกรายการ ด้วยการดึงรายการสุดท้ายนี้จะส่งผลให้มีการแทรกรายการล่าสุดในแผนที่
ให้obj
เป็นวัตถุของคุณ ผู้บริหาร:
(_ => _[Object.keys(_).pop()])( obj )
หากคุณหมายถึงรับคีย์สุดท้ายตามตัวอักษรคุณสามารถ (รับประกัน):
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'