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
,然后排序。