从函数和参数

时间:2016-08-01 13:09:35

标签: javascript arrays function parameters

就我现在的代码而言,这是代码:

<!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>

以上应该给我a和6或b和3作为结果。但是我得到了NaN作为值部分的结果。当使用&#34;返回e.a&#34;在数学部分,只有一个as键工作。

我希望能够确定我作为参数输入的键的最大值或最小值。

希望你能在这里帮助我。

提前致谢。

TheVagabond

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些命名混乱。例如,scanvalue是您的函数的名称,但您尝试将其作为e(e.scanvalue)的参数来访问它。我应该scanval。但仍有一些问题。如果e.scanval,您无法访问e的属性“a”或“b”。您正试图访问变量的变量。

然后,您应该使用e[scanval]。它会返回“a”或“b”的值。但是如果对象没有其中一个?然后你应该添加“|| 0”来获得正确的值。 (而不是NaN或未定义)这意味着;使用e [scanval]如果有效,如果不使用0。

使用此功能;

return e[scanval] || 0;
  

如果您的边界包含一些负值,请使用-9999或-Infinity。

答案 1 :(得分:0)

你得到的是因为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))

相应。 希望这有助于!!!!

相关问题