2017-04-14 88 views
0

從以下對象中,我怎樣才能從最大索引鍵即4的屬性中讀取'空氣'? (30.9)獲取對象中最大索引鍵的屬性

{ 
    1: { 
    air: "31.2", 
    evap: "25.3", 
    t_condenser: "43.8" 
    }, 
    2: { 
    air: "31.1", 
    evap: "25.3", 
    t_condenser: "43.6" 
    }, 
    3: { 
    air: "31.0", 
    evap: "25.3", 
    t_condenser: "43.5" 
    }, 
    4: { 
    air: "30.9", 
    evap: "25.2", 
    t_condenser: "43.3" 
    } 
} 

我曾嘗試以下,以試圖獲得最後的關鍵,但它只是讀取未定義:

$.getJSON("handler.php?action=fetchLAE", function(data){ 

    console.log(data.length); 

}); 
+2

這是一個對象,而不是陣列。它也不是「JSON數組」。 JSON是一種字符串格式,而不是數據結構。 –

+0

爲什麼要使用這個對象?爲什麼不使用數組?然後,而不是掃描,它只是'data [data.length-1] .air'。 –

回答

2

注:數據格式錯誤。這就是數組的用途,你的API返回一個Object。

解決方案:在找到數據的最高鍵(至極是一個對象):

data[Object.keys(data).sort().pop()].air 

說明:

Object.keys(data) 

獲取所有屬性作爲陣列例如[1,4,3,2]。

現在我們對它進行排序上升,並採取最後:

.sort().pop() 

所以我們把這個屬性了對象,並採取了空氣值

data[4].air 

http://jsbin.com/setibevozu/edit?console

0

這是不是有效的JSON,而是一個JavaScript對象。

您可以使用Object.keys函數獲取對象屬性,然後使用length屬性獲取最後一個元素或屬性。

console.log(obj[Object.keys(obj).length].air);

var obj = { 
 
1: { 
 
air: "31.2", 
 
evap: "25.3", 
 
t_condenser: "43.8" 
 
}, 
 
2: { 
 
air: "31.1", 
 
evap: "25.3", 
 
t_condenser: "43.6" 
 
}, 
 
3: { 
 
air: "31.0", 
 
evap: "25.3", 
 
t_condenser: "43.5" 
 
}, 
 
4: { 
 
air: "30.9", 
 
evap: "25.2", 
 
t_condenser: "43.3" 
 
} 
 
}; 
 

 
console.log(obj[Object.keys(obj).length].air);

+0

這假設對象只包含連續的數字鍵,並從1開始。 –

+0

@Derek朕會功夫,是的,這就是OP中數據所包含的內容。 – Agalo

1

您可以獲得與Object.keys()對象的鍵,然後用Math.max以獲得最高的國家之一。

var json = { 
 
    1: { 
 
    air: "31.2", 
 
    evap: "25.3", 
 
    t_condenser: "43.8" 
 
    }, 
 
    2: { 
 
    air: "31.1", 
 
    evap: "25.3", 
 
    t_condenser: "43.6" 
 
    }, 
 
    3: { 
 
    air: "31.0", 
 
    evap: "25.3", 
 
    t_condenser: "43.5" 
 
    }, 
 
    4: { 
 
    air: "30.9", 
 
    evap: "25.2", 
 
    t_condenser: "43.3" 
 
    } 
 
}; 
 

 

 
var maxKey = Math.max(...Object.keys(json)); 
 
var lastElementAir = json[maxKey].air; 
 

 
console.log(lastElementAir);

+2

只是一個側面說明,這個答案使用只在ES6 +中可用的擴展運算符。等價於ES5:'Math.max.apply(Math,+ Object.keys(json))'。 –