Javascript 数组最大值函数给出了意外的结果
我有此函数用于返回数组的最大值:Javascript 数组最大值函数给出了意外的结果,javascript,arrays,for-loop,max,Javascript,Arrays,For Loop,Max,我有此函数用于返回数组的最大值: Array.prototype.max = function() { var max = this[0]; var len = this.length; for (var i = 1; i < len; i++) { if (this[i] > max) { max = this[i]; } } return max; } data1Values.max()返回6而不是12。它以
Array.prototype.max = function() {
var max = this[0];
var len = this.length;
for (var i = 1; i < len; i++)
{
if (this[i] > max)
{
max = this[i];
}
}
return max;
}
data1Values.max()
返回6而不是12。它以某种方式跳过了最后一个值
我在循环中插入了alert(this[I])
和alert(max)
,它可以识别这两个值(12为this[I]
,6为max
),但它不会进入条件
这里发生了什么?您得到的是一个字符串数组,而不是数字。字符串“6”大于字符串“12”
尝试初始化数组,但不要在值周围加引号。您得到的是字符串数组,而不是数字数组。字符串“6”大于字符串“12”
尝试初始化数组,但不要在值周围加引号。您正在比较字符串。“2”大于“1000” 更改为数字或添加parseInt(此[i],10)
Array.prototype.max=function(){
var len=此长度;
var max=-1;
对于(变量i=0;imax){
max=val;
}
}
返回最大值;
}
var data1Values=['0','0','0','0','3','0','6','12']
警报(data1Values.max());
您正在比较字符串。“2”大于“1000”
更改为数字或添加parseInt(此[i],10)
Array.prototype.max=function(){
var len=此长度;
var max=-1;
对于(变量i=0;imax){
max=val;
}
}
返回最大值;
}
var data1Values=['0','0','0','0','3','0','6','12']
警报(data1Values.max());
您可以将Math.max
与一起使用。apply
从数组中获取最大值<代码>Math.max.apply(null,data1value),因此如果您希望在Array.prototype
上使用该函数,请执行以下操作Array.prototype.max=function(){return Math.max.apply(null,this);}我想知道这是否可能。为什么不添加为答案?@mplungjan:因为从技术上讲,它不能回答所问的问题。只是想提供它作为一种替代方法。您可以将Math.max
与一起使用。apply
从数组中获取最大值<代码>Math.max.apply(null,data1value)
,因此如果您希望在Array.prototype
上使用该函数,请执行以下操作Array.prototype.max=function(){return Math.max.apply(null,this);}我想知道这是否可能。为什么不添加为答案?@mplungjan:因为从技术上讲,它不能回答所问的问题。只是想把它作为一种替代方法。因为数字符号的顺序与数字顺序相同;也就是说,字符“9”的代码值大于字符“8”。但是,对于数字字符的多位数字符串,如果第一个字符不同,则较大的字符将确定较大的字符串值。这就像字典里“苹果”这个词在“猫”之前的用法;'a'比c'小,这就是最重要的。谢谢你的全面回答:)因为数字符号的顺序与数字顺序相同;也就是说,字符“9”的代码值大于字符“8”。但是,对于数字字符的多位数字符串,如果第一个字符不同,则较大的字符将确定较大的字符串值。这就像字典里“苹果”这个词在“猫”之前的用法;'“a”比“c”小,这才是最重要的。谢谢你的全面回答:)
var data1Values = ['0','0','0','0','3','0','6','12']
Array.prototype.max = function() {
var len = this.length;
var max = -1;
for (var i=0; i < len; i++) {
var val = parseInt(this[i],10);
if (val > max) {
max = val;
}
}
return max;
}
var data1Values = ['0','0','0','0','3','0','6','12']
alert(data1Values.max());