我試圖使用JavaScript對象作爲關聯數組,一切都很好,直到我需要獲取存儲在其中的條目數。什麼是最簡單和最優雅的方式來做到這一點?我所能想到的只是運行for each
循環或jQuery $.each
函數,只是看它會做多少次迭代,但看起來像是一件可怕的事情。如何獲取JavaScript對象中的字段數?
11
A
回答
29
舊的Firefox支持__count__
屬性。較新的環境支持ES5的Object.keys
。對於年齡較大的環境中,我們要回退到剛纔遍歷對象和手動計數(啊!):
function count(obj) {
if (obj.__count__ !== undefined) { // Old FF
return obj.__count__;
}
if (Object.keys) { // ES5
return Object.keys(obj).length;
}
// Everything else:
var c = 0, p;
for (p in obj) {
if (obj.hasOwnProperty(p)) {
c += 1;
}
}
return c;
}
2
歸結到這一點,或者在添加和刪除對象的屬性時保持計數。
2
不幸的是,沒有一個真正的好方法來知道對象中的屬性數量而不需要迭代它們。以下是相當簡單,但:
function countProps(obj) {
var l = 0;
for (p in obj) l++;
return l;
}
var bob = { a: 1, b: 2};
alert(countProps(bob));
3
我相信這已在此處回答,和/或谷歌搜索可以引導你在正確的方向。不過我要指出的是,最大的陷阱之一,如果你在的形式使用一個循環:
for (var attr in obj) { ....
是對象可以與你沒有必要添加屬性,並作爲標準的解決方案,這將混亂我記得是另外使用hasOwnProperty的測試,請參閱https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty
22
這爲我工作:
Object.keys(obj).length
相關問題
- 1. 如何獲取對象的字段?
- 2. 如何獲取模板中ManyToMany字段中對象的數量
- 3. mysqli對象如何獲取字段
- 4. 如何在JavaScript中獲取Date對象的數字組件?
- 5. 如何從JavaScript中的Kendo Grid對象獲取隱藏的列字段名稱
- 6. 獲取JavaScript對象的字段由字符串名稱模式
- 7. 獲取函數的對象中的JavaScript
- 8. 如何通過反射獲取對象中的字段?
- 9. Node.js:如何獲取錯誤對象中的錯誤字段
- 10. 如何從Django模板中的相關對象獲取字段?
- 11. 如何在查找字段中獲取對象的屬性?
- 12. javascript - 獲取對象數據
- 13. 獲取數據對象中的JavaScript
- 14. 如何獲取mongodb中的對象數組中的指定字段的值
- 15. 定義對象列表。獲取對象中的特定字段
- 16. 如何獲取javascript對象的值?
- 17. Javascript:如何使用字符串數組獲取對象屬性?
- 18. 如何獲取數組內的JavaScript對象中的鍵的值?
- 19. 如何從文本文件中的對象數組中獲取特定字段
- 20. javascript:如何獲取關聯數組中的對象的索引?
- 21. 如何在對象中獲取一些字段?
- 22. 從JavaScript中的對象數組中獲取對象
- 23. 獲取JavaScript對象
- 24. 獲取JavaScript對象
- 25. 如何獲取表單的字段對象的集合?
- 26. 如何在javascript或jquery中獲取json數組對象的值
- 27. 如何從字典中獲取NSObject對象的對象?
- 28. 如何獲取組選項卡對象中每個字段的計數
- 29. Ruby:如何根據類名獲取類,以及如何根據字段名獲取對象的字段?
- 30. javascript如何從充滿對象的數組中獲取對象值?
哦,我的上帝,爲O(n)來獲得地圖中條目的數量...呃,這很糟糕。 :/ – fgysin 2012-11-15 09:19:32
(不是說你的答案是不正確的順便說一句,只是失望的JS ...) – fgysin 2012-11-15 09:20:29