2013-04-14 86 views
0

我寫了一個簡單的函數來通過JSON數組值應用數學,它沒有問題。
將jquery函數應用於JSON數組?

$(document).ready(function(){ 
    var arr1 = {"gold":"1000","iron":"2000","wood":"4500","food":"800"} ; 
    var arr2 = [{"gold":"100","iron":"80","wood":"120","food":"70"}]; 
    Array.max = function(array){ 
    return Math.max.apply(Math, array); 
    }; 
    Array.min = function(array){ 
     return Math.min.apply(Math, array); 
    }; 
    function getValidenum(resources,cost) { 
     var output = [] ; 
     $.each(cost, function(i, item) { 
      output.push(Math.floor(resources.gold/item.gold)) ; 
      output.push(Math.floor(resources.iron/item.iron)) ; 
      output.push(Math.floor(resources.wood/item.wood)) ; 
      output.push(Math.floor(resources.food/item.food)) ; 
     }); 
     return Array.min(output) ; 
    } 
    alert(getValidenum(arr1,arr2)); 
}); 

問題出現時,我通過陣列添加更多的值到所述第二陣列,並試圖對循環應用的功能。的

$(document).ready(function(){ 
    var arr1 = {"gold":"1000","iron":"2000","wood":"4500","food":"800"} ; 
    var arr2 = [{"gold":"100","iron":"80","wood":"120","food":"70"},{"gold":"10","iron":"20","wood":"50","food":"30"}]; 
    Array.max = function(array){ 
    return Math.max.apply(Math, array); 
    }; 
    Array.min = function(array){ 
     return Math.min.apply(Math, array); 
    }; 
    function getValidenum(resources,cost) { 
     var output = [] ; 
     $.each(cost, function(i, item) { 
      output.push(Math.floor(resources.gold/item.gold)) ; 
      output.push(Math.floor(resources.iron/item.iron)) ; 
      output.push(Math.floor(resources.wood/item.wood)) ; 
      output.push(Math.floor(resources.food/item.food)) ; 
     }); 
     return Array.min(output) ; 
    } 
    $.each(arr2, function(i, item) { 
      alert(getValidenum(arr1,item)); 
     }); 

}); 

而不是顯示爲2倍的2個陣列中ARR2結果

var arr2 = [{"gold":"100","iron":"80","wood":"120","food":"70"},{"gold":"10","iron":"20","wood":"50","food":"30"}]; 

它顯示的NaN兩次

+1

你應該嘗試使用'parseInt'你試圖對字符串進行操作 –

回答

0

你已經改變你使用什麼作爲的第二個參數你的兩個例子之間的getValidenum

在第一個你通過arr2,一個對象數組。

第二,您傳入匿名函數的item參數,arr2數組中的對象。

如果您將第一個示例更改爲在調用getValidenum時也使用$.each,則會看到類似的失敗。

NaN本身導致當getValidenumcost參數是一個對象,因爲.each拆分對象屬性插入鍵(i)和值(item)。因此,在你的第二個例子中的迭代你有這樣的值:

i === "gold" 
item === "100" 

當你再嘗試訪問item.gold您實際要求"100".gold這是undefined和產量NaN當您通過將其劃分。