繁体   English   中英

使用函数和参数从关联数组中获取最大值或最小值

[英]Get max or min value from associative array with function and 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作为价值部分的结果。 在“数学”部分中使用“ return ea”并且仅将a作为键时,它可以工作。

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

希望你能在这里帮助我。

提前致谢。

流浪者

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

然后,您应该使用e[scanval] 它使您返回到“ a”或“ b”的值。 但是,如果对象没有其中之一? 然后,您应该添加“ || 0”以获得正确的值。 (而不是NaN或未定义) 是指; 如果有效,请使用e [scanval],否则请不要使用0。

用这个;

return e[scanval] || 0;

如果边界包括一些负值,请使用-9999或-Infinity之类的值。

您得到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))

相应地。 希望这可以帮助!!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM