我有一个数组,其中包含几个数字,如下所示:
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
我想从这个数组中获得最小和最大的数字。这似乎很容易,但是我意外地得到了以下代码的错误输出。
function highAndLow(numbers){
var args = Array.prototype.slice.call(arguments);
var m = 0, i = 0, n = args.length;
console.log(args.length)
for (i=0; i < n; i++) {
if (args[i] > m) {
m = args[i];
console.log(m)
}
}
return m
}
它表示长度为1,返回值为0。
答案 0 :(得分:9)
您有一个字符串作为参数。你需要先拆分。并转换为数字。
args = numbers.split(' ').map(Number);
次要提示:您可以使用第一个元素作为第一个最小/最大值,并从第二个元素迭代。
function highAndLow(numbers) {
var args = numbers.split(' ').map(Number),
min = args[0],
max = args[0],
i,
n = args.length;
for (i = 1; i < n; i++) {
if (args[i] < min) {
min = args[i];
}
if (args[i] > max) {
max = args[i];
}
}
return { min: min, max: max };
}
console.log(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"));
&#13;
答案 1 :(得分:5)
您可以使用Math.max(), Math.min()
:
function highAndLow(str){
var arr = str.split(/\s/);
var max = Math.max.apply(Math, arr);
var min = Math.min.apply(Math, arr);
console.log('Max:::', max, " Min::::", min);
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6");
答案 2 :(得分:2)
您正在将字符串作为参数传递给您的函数。
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
应替换为
highAndLow([4, 5, 29, 54, 4, 0, -214, 542, -64, 1, -3, 6, -6]);
实际传递带数字的数组。
答案 3 :(得分:1)
function highAndLow(data) {
var data = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6";
var dataArr = data.split(' ').map(Number);
var result = {};
result.max = Math.max.apply(Math, dataArr);
result.min = Math.min.apply(Math, dataArr);
return result;
}
var res = highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
console.log(res.min);
console.log(res.max);
&#13;
答案 4 :(得分:1)
这是最简单的方法:
function highAndLow(str) {
str = str.split(' ').sort(function(a, b) {
return parseInt(a) - parseInt(b)
});
return [str[str.length - 1],
str[0]
];
}
document.write(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 -6'));
答案 5 :(得分:1)
您可以尝试使用此代码。
<script type="text/javascript">
function highAndLow(numbers)
{
var args = numbers.split(" ");
console.log(args.length)
var min = Math.min.apply(Math, args),
max = Math.max.apply(Math, args);
console.log(min);
console.log(max);
}
highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 -6');
</script>
答案 6 :(得分:1)
splice.call返回一些不是数组长度的东西,因为它将所有内容都视为字符。
这个实现应该有所帮助,
// Code goes here
function highAndLow(numbers){
var args = numbers.split(" ");
var n= args.length;
document.getElementById("argLength").innerHTML="Array Length:"+n;
var i=0;
var max = Number(args[i]);
var min = Number(args[i]);
for(i=1;i<n; i++){
var num=Number(args[i]);
if(num>max)
max=num;
if(min>num)
min=num;
}
document.getElementById("output").innerHTML=("Min:"+min+", Max:"+max);
}
<!DOCTYPE html>
<html>
<head>
</head>
<body onload='highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6");'>
<h1 id="argLength"></h1>
<h1 id="output"> </h1>
</body>
</html>