collections - จำนวนขององค์ประกอบในวัตถุ javascript
มีวิธีใดที่จะได้จำนวนองค์ประกอบในวัตถุ Javascript จากที่ไหนสักแห่งหรือไม่?? (เช่น ความซับซ้อนเวลาแบบคงที่)
ฉันไม่สามารถหาคุณสมบัติหรือเมธอดที่ดึงข้อมูลนั้นได้ ตอนนี้ฉันคิดได้เพียงการทำวนซ้ำผ่านทั้งคอลเลกชัน แต่ก็ใช้เวลาตามเชิงเส้น มันแปลกที่ไม่มีการเข้าถึงขนาดของวัตถุโดยตรง คุณไม่คิดเหรอ
แก้ไข:
ฉันกำลังพูดถึงวัตถุ Object (ไม่ใช่วัตถุโดยทั่วไป):
var obj = new Object ;
คำตอบ #1
แม้ว่าการใช้งาน JS อาจเก็บค่าดังกล่าวไว้ภายใน แต่ก็ไม่มีวิธีมาตรฐานในการดึงมันออกมา
ในอดีต, เวอร์ชันของ Javascript ของ Mozilla เคยเปิดเผย __count__ ที่ไม่เป็นมาตรฐาน แต่ได้ถูกลบออกตั้งแต่เวอร์ชัน 1.8.5
สำหรับการเขียนสคริปต์ข้ามเบราว์เซอร์ คุณต้องวนลูปผ่านคุณสมบัติอย่างชัดเจนและตรวจสอบ hasOwnProperty():
function countProperties(obj) {
var count = 0;
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
++count;
}
return count;
}
ในกรณีของการใช้งานที่รองรับ ECMAScript 5 สิ่งนี้ก็สามารถเขียนได้เช่นกัน (เครดิตแก่ Avi Flax)
function countProperties(obj) {
return Object.keys(obj).length;
}
โปรดจำไว้ว่าคุณจะพลาดคุณสมบัติที่ไม่สามารถนับได้ด้วย (เช่น length ของอาร์เรย์)
หากคุณกำลังใช้เฟรมเวิร์กเช่น jQuery, Prototype, Mootools, $อะไรก็ตามที่มาแรงที่สุดในตอนนี้ ตรวจสอบว่าพวกมันมาพร้อมกับ collections API ของตัวเองหรือไม่ ซึ่งอาจเป็นวิธีแก้ปัญหาของคุณที่ดีกว่าการใช้วัตถุ JS แบบพื้นฐาน
คำตอบ #2
ในการทำเช่นนี้ในสภาพแวดล้อมที่เข้ากันได้กับ ES5 ใด ๆ
Object.keys(obj).length
(การรองรับเบราว์เซอร์จากที่นี่)
(เอกสารเกี่ยวกับ Object.keys ที่นี่ รวมถึงวิธีการที่คุณสามารถเพิ่มไปยังเบราว์เซอร์ที่ไม่ใช่ ECMA5)
คำตอบ #3
ถ้าคุณ กำลังใช้งาน jQuery อยู่แล้วในการสร้างของคุณ แค่ทำแบบนี้:
$(yourObject).length
มันทำงานได้ดีสำหรับฉันกับวัตถุ และฉันก็มี jQuery อยู่แล้วเป็นสิ่งที่ต้องพึ่งพา
