2014-10-18 98 views
0

好了,所以這孤單JSON對象:計數JSON對象的JavaScript

jsontext = {"switches":[{"dpid":"00-00-00-00-00-01"},{"dpid":"00-00-00-00-00-02"},{"dpid":"00-00-00-00-00-03"},{"dpid":"00-00-00-00-00-04"},{"dpid":"00-00-00-00-00-05"},{"dpid":"00-00-00-00-00-06"},{"dpid":"00-00-00-00-00-07"}], 
"links":[["00-00-00-00-00-01","00-00-00-00-00-05"],["00-00-00-00-00-02","00-00-00-00-00-03"],["00-00-00-00-00-05","00-00-00-00-00-06"],["00-00-00-00-00-05","00-00-00-00-00-07"],["00-00-00-00-00-02","00-00-00-00-00-04"],["00-00-00-00-00-01","00-00-00-00-00-02"]]} 

的目標是要計算所有存在於它的DPID對象......所以我做了迄今爲止以下內容:

function objectLength(obj) { 
    var result = 0; 
    for(var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
    // or Object.prototype.hasOwnProperty.call(obj, prop) 
     result++; 
    } 
    } 
    return result; 
} 

,我打電話讓在交換機

objectLength(jsontext.switches); 

的問題是,DPID的量的功能時,有用於開關只有一個DPID ES是這樣的:

jsontext = {"switches":[{"dpid":"00-00-00-00-00-01"}],"links":[]} 

它計數0 ...它不會爲部分做的事情......由於某種原因認爲其空我猜..?

TL; DR爲什麼當只有1個開關的DPID存在是JSON對象返回0 ..

乾杯!

+0

你說什麼是不可重複的。你在'jsontext'的賦值中有一個尾部的引號,所以試圖運行它只會導致語法錯誤。如果刪除它,代碼將返回1,就像預期的那樣:http://jsfiddle.net/uu1mtL0g/此外,這裏根本沒有JSON,你擁有的是一個Javascript對象。 JSON是表示對象的文本格式。 – Guffa 2014-10-18 14:56:27

回答

-1

你可以通過過濾和使用length屬性來完成。

var arr = jsontext.switches.filter(function(x){return x.hasOwnProperty('dpid'); }); 
console.log(arr.length); // number of objects 

DEMO

+0

我得到的錯誤:TypeError:jsontext.switches不是一個對象 - 通過火狐當測試.. – TheLipster 2014-10-18 14:57:50

+0

你需要'JSON.parse()'字符串將其轉換爲對象 – 2014-10-18 15:03:08

+0

@JaredSmith它不是JSON,但只是一個東西。 – 2014-10-18 15:07:17

1

由於switches財產似乎包含與dpid屬性的對象,你真的沒有做什麼特別指望他們。只要這樣做:

var count = jsontext.switches.length; 
+0

這完美的作品,也是一個班輪! – 2015-12-24 16:38:10