ค้นหาเว็บไซต์

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 อยู่แล้วเป็นสิ่งที่ต้องพึ่งพา

บทความที่เกี่ยวข้อง