[英]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.