2016-08-01 137 views
0

下面是代碼,只要我得到了它現在:獲取從功能關聯數組最大值或最小值和參數

<!DOCTYPE html> 
<html> 
<body> 

<button onclick="scanarray('a', 'max')">Test with a, max</button> 

<button onclick="scanarray('b', 'min')">Test with b, min</button> 



<p id="demo">test</p> 

<script> 



var array = [{"a":1},{"b":3},{"a":6},{"b":10}]; 


var max = null; 
var min = null; 
var value = null; 

function scanarray(scanval, searchterm) { 

    if (array.length < 1) { 
    return -1; 
    } 

    if(searchterm == "max"){ 

    max = Math.max.apply(Math,array.map(function(e){return e.scanvalue;})) 

    }else if (searchterm == "min"){ 

    min = Math.min.apply(Math,array.map(function(e){return e.scanval;})) 

}else 
{document.getElementById("demo").innerHTML = "Only max and min available";} 

    if(searchterm == "max"){ 

     document.getElementById("demo").innerHTML = "Search: " + scanval +" "+ "Value: " + max; 
    } 

    if(searchterm == "min"){ 
     document.getElementById("demo").innerHTML = "Search: " + scanval +" "+ "Value: " + min; 
    } 

} 
</script> 

</body> 
</html> 

上面應該給我一個和6或b和3的結果。然而,我得到NaN作爲價值部分的結果。在Math部分使用「return e.a」時,只能使用as鍵。

我希望能夠確定我作爲參數輸入到函數的鍵的最大值或最小值。

希望你能幫助我。

在此先感謝。

TheVagabond

+0

'array.map(function(e){return e.scanvalue;})'什麼是e.scanvalue? – gcampbell

+0

scanvalue是我在這裏掃描的關鍵值a或b e僅用於函數,因此它被引用 – Thevagabond

+0

數組中的對象沒有名爲'scanvalue'的屬性。 – gcampbell

回答

1

您的代碼中有一些命名混亂。例如,scanvalue是您的功能的名稱,但您試圖將其作爲e的參數(e.scanvalue)。我應該是scanval。但仍然存在一些問題。如果e.scanval不能達到e的財產「a」或「b」。您正試圖達到變量的變量

然後,您應該使用e[scanval]。它將您返回到「a」或「b」的值。但是,如果對象沒有其中之一?那麼你應該添加「|| 0」來獲得正確的值。 (而不是NaN或undefined)這意味着;使用e [scanval]如果其有效,如果不使用0.

使用此;

return e[scanval] || 0; 

如果你的邊界包括一些負值,使用類似-9999或負無窮大。

+0

非常感謝,最大的部分,但最小的部分不工作。我需要改變那裏的東西嗎?我得到了-Infinity,但它應該是3,因爲3是最低的b值。 – Thevagabond

+0

這不是編程錯誤。對於最小的部分,使用+ Infinity或類似+99999的東西。簡單的邏輯。 –

+0

謝謝,現在它的作品! – Thevagabond

0

您正在獲取Nan,因爲e.scanvalue在您的情況下返回undefined。

嘗試使用自定義功能。

function getValue(arr){ 
var res = []; 
for(var j = 0; j < arr.length; j++) 
{ 

    for(var anItem in arr[j]) 
    { 
     res.push(arr[j][anItem]); 
    } 
} 
return res; 
} 

,並呼籲像

max = Math.max.apply(Math,getValue(array)) 

min = Math.min.apply(Math,getValue(array)) 

因此這個功能。 希望這有助於!

相關問題