Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组的最高值_Javascript_Arrays - Fatal编程技术网

Javascript 数组的最高值

Javascript 数组的最高值,javascript,arrays,Javascript,Arrays,我有一个数组,它包含几个数字,如下所示: 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

我有一个数组,它包含几个数字,如下所示:

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

}
功能高低(数字){
var args=Array.prototype.slice.call(参数);
变量m=0,i=0,n=args.length;
console.log(args.length)
对于(i=0;im){
m=args[i];
控制台日志(m)
}
}
返回m
}

它表示长度为1,返回值为0。

您有一个字符串作为参数。你需要先分开。并转换为数字

args = numbers.split(' ').map(Number);
一个小提示:您可以使用第一个元素作为第一个最小/最大值,并从第二个元素开始迭代

功能高低(数字){
变量args=数字。拆分(“”)。映射(数字),
最小值=args[0],
max=args[0],
我
n=args.长度;
对于(i=1;i最大值){
max=args[i];
}
}
返回{min:min,max:max};
}
log(高位和低位(“45295440-214542-641-366-6”)您可以使用
Math.max()、Math.min()

函数高低(str){
var arr=str.split(/\s/);
var max=数学最大应用(数学,arr);
var min=Math.min.apply(Math,arr);
log('Max::',Max,“Min::”,Min);
}

高低(“45295440-214542-641-36-6”)您正在将字符串作为参数传递给函数

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]);
实际传递带有数字的数组。

功能高低(数据){
var data=“45295440-214542-641-36-6”;
var dataArr=数据分割(“”).map(编号);
var result={};
result.max=Math.max.apply(Math,dataArr);
result.min=Math.min.apply(Math,dataArr);
返回结果;
}
var res=高和低(“45295440-214542-641-366-6”)
控制台日志(res.min);

console.log(res.max)以下是最简单的方法:

函数高低(str){
str=str.split(“”).sort(函数a,b){
返回parseInt(a)-parseInt(b)
});
返回[str[str.length-1],
str[0]
];
}

写作(高低('45295440-214542-641-366-6')您可以尝试此代码

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

功能高和低(数字)
{
var args=numbers.split(“”);
console.log(args.length)
var min=Math.min.apply(数学,参数),
max=Math.max.apply(Math,args);
控制台日志(分钟);
控制台日志(最大值);
}
高低('45295440-214542-641-366-6');

splice.call返回的是其他内容,而不是数组的长度,因为它将所有内容都视为字符

这一实施应该会有所帮助

  • 使用array.split(delimter)用空格拆分字符串
  • 然后在执行测试时将拆分的数组转换为数字
  • 我们循环并测试最小和最大数组值
  • //代码在这里
    功能高和低(数字){
    var args=numbers.split(“”);
    var n=args.length;
    document.getElementById(“argLength”).innerHTML=“数组长度:”+n;
    var i=0;
    var max=数量(args[i]);
    var min=数量(args[i]);
    对于(i=1;imax)
    max=num;
    如果(最小值>数值)
    min=num;
    }
    document.getElementById(“输出”).innerHTML=(“最小:+最小+”,最大:+最大);
    }
    
    
    那不是一个数组,而是一个字符串。第二行是
    var arguments=numbers.split(“”)
    Math.max.apply(数学、数字、分割(“”).map(数字))
    没错,但这是拆分问题,而不是最大值问题。只是一个奇怪的问题,
    Math.max
    Math.min
    将在内部运行循环。因此,如果我们运行单循环并同时指定
    min
    max
    值,它应该会更快。另外,
    .apply
    将更新上下文,因此需要几毫秒的时间。但是
    .apply
    运行得更快。怎么做?@NinaScholz:是的,我知道。。。。。。我只是添加了,因为它可能对用户有帮助:)@Rajesh我想你应该把它改成
    str.split(/\s+/)
    以获得准确度。此外,尽量不要在函数本身中执行
    str.split(“”)
    。尝试将该值作为实际数组传递(aka,在函数之外执行工作)。因此,如果您无法控制字符串部分(可能是一个奇怪的api),请执行类似于
    highAndLow(inputStr.split(“”))
    的操作。我喜欢
    sort
    ,与
    min
    /
    max
    相比,它的性能更好吗?我不完全确定
    min
    /
    max
    是什么意思,但它的性能非常好。可以更好,例如在
    .map
    调用中调用
    parseInt
    ,然后排序。