簡體   English   中英

JavaScript 關聯數組的長度

[英]Length of a JavaScript associative array

我有一個 JavaScript 關聯數組(或者有些人可能更喜歡稱它為對象) ,比如

var quesArr = new Array();
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";

是否有可以獲取此數組長度的內置函數,或者 jQuery 或其他庫中的解決方案? 目前 quesArr.length 會給出 0,因為你們大多數人都知道。

請不要建議像這個問題中提到的那樣遍歷整個數組/對象,因為我擁有的數組/對象非常大。

有沒有辦法讓我繼續這樣做?

不,沒有內置屬性可以告訴您對象具有多少屬性(這就是您要查找的屬性)。

我能想到的最接近的是兩個 ES5 和更高版本的特性, Object.keys ( spec | MDN ) 和Object.getOwnPropertyNames ( spec | MDN )。 例如,您可以像這樣使用Object.keys

console.log(Object.keys(quesArr).length); // "3"

Object.keys返回對象自己的可枚舉字符串命名屬性的名稱數組。 但是在內部(理論上)它是您不想使用的循環(當然,ES5 之前的環境的 polyfill 使用了循環)。 如果您還需要不可枚舉的字符串命名屬性, Object.getOwnPropertyNames改用Object.getOwnPropertyNames

在 ES2015+ 中,對象可以具有鍵為 Symbols 而不是字符串的屬性。 Object.getOwnPropertySymbols ( spec | MDN ) 讓你得到它們。


FWIW,除非您要使用對象的Array功能,否則不要將其設為數組。 反而:

var quesArr = {};
quesArr["q101"] = "Your name?";
quesArr["q102"] = "Your age?";
quesArr["q103"] = "Your school?";

這些鍵也不必作為方括號中的字符串文字給出,如果您不希望它們是(無論您使用數組還是普通對象):

var quesArr = {};
quesArr.q101 = "Your name?";
quesArr.q102 = "Your age?";
quesArr.q103 = "Your school?";

但如果您願意,也可以使用其他表示法; 它們完全等效,只是使用點符號表示鍵必須是有效的標識符名稱(在括號中,它們可以是任何東西)。

你甚至可以這樣做:

var quesArr = {
    q101: "Your name?",
    q102: "Your age?",
    q103: "Your school?"
};

或(如果密鑰不是有效標識符):

var quesArr = {
    "q101": "Your name?",
    "q102": "Your age?",
    "q103": "Your school?"
};

這些可以是單引號或雙引號。

假設你有以下內容,

var myObject = {};  // Denotes an Object is being created
myObject.city = "Chennai";
myObject.state = "Tamilnadu";
myObject.country = "Indian Peninsula";
console.log(myObject.length);  // Results in undefined

但是,有一種方法可以在現代瀏覽器(Chrome、Firefox 4+ 和 Internet Explorer 9)中計算長度:

Object.keys(myObject);
// --> ["city", "state", "country"]
Object.keys(myObject).length
// --> 3

還可以通過使用稱為length的關聯元素跟蹤數組的長度來處理關聯數組長度問題。

眾所周知

myArray["length"] = 0;

添加或刪除元素時,只需從myArray["length"]元素中添加或減去。

然后,您可以執行以下操作:

theLength = myArray.length;

關聯數組沒有 length 屬性,但您可以獲得 length

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM