2013-10-22 133 views
0

我正在學習jQuery,並且在試圖找出如何選擇多維數組中的元素時遇到問題。我有一個包含數據庫ID的選擇列表,我想根據所選的ID在數據庫中設置一個帶有成本字段的var。除了將選定的ID轉換爲成本之外,我擁有所有的作品。請有人能幫助我解決這個問題嗎?jQuery grep返回多維數組

var rangeListData = [{"idrange_list":"1","range_cost":"0","target_range_name":"Self Only"},{"idrange_list":"2","range_cost":"1","target_range_name":"1 Space"},{"idrange_list":"3","range_cost":"2","target_range_name":"2 Spaces"},{"idrange_list":"4","range_cost":"3","target_range_name":"3 Spaces"},{"idrange_list":"5","range_cost":"4","target_range_name":"4 Spaces"},{"idrange_list":"6","range_cost":"5","target_range_name":"5 Spaces"}]; 

$('#slctPowerTarget').change(function() { 
    var targetID = $('#slctPowerTarget').val(); 
    var cost $.grep(rangeListData, function(e) { return e.idrange_list == targetID }); // this is the line that is wrong 
    $('#spanTotalEffectsCost').text(cost); 

}); 

如果我把targetID放在哪裏,那它的成本就很好。但是當我試圖查看這件事時,沒有任何反應。這是不正確的,我不知道還有什麼可以嘗試。我想我得到idrange_list == targetID應該如何匹配它們,但不知道如何調用相關的range_cost。

感謝您提供的任何幫助!我閱讀了jquery.com上的文檔,但似乎無法將我的頭圍繞在他們身上。

回答

3

你可以這樣做: -

// Get the Multidimensional Array first 
var data = $.grep(rangeListData, function (e) { 
    return e.idrange_list === targetID 
}); 

// Get the range cost from the array 
var cost = data[0].range_cost; 

// Check the value in console for debugging purpose 
console.log(cost); 
+1

非常好!這個伎倆。我發現我忘記從篩選出的對象中選擇我需要的東西。由於它有很多對象,而不僅僅是一個標準的數組。我需要找到對象,然後找到我需要的對象。它似乎是jQuery中的兩個步驟。我也看到你加了===這也是一個很好的電話。感謝幫助我的睡眠,通過這種新的語言,剝奪了我的頭腦! – user1518699

+0

很高興幫助! –

0

下面是最終代碼。我還在那裏添加了一個IF子句,以防他們選擇默認設置。這樣它將重置,而不是拋出一個錯誤,並保持頁面計算工作,無論他們改變了下拉或返回到「選擇...」

$('#slctPowerRange').change(function() { 
    var rangeID = $('#slctPowerRange').val(); 
    if (rangeID > 0) { 
     var rdata = $.grep(rangeListData, function (e) { 
      return e.idrange_list === rangeID 
      }); 
     var rcost = rdata[0].range_cost; 
    } 
    else { 
     var rcost = 0 ; 
    } 
    $('#hdnRangeCost').val(rcost); 
});