Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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/4/jsp/3.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_Null_Max_Undefined - Fatal编程技术网

在稀疏javascript数组中查找最大值

在稀疏javascript数组中查找最大值,javascript,arrays,null,max,undefined,Javascript,Arrays,Null,Max,Undefined,有没有合适的方法可以找到具有未定义值的稀疏数组的最大值 谢谢 var testArr=[undefined,undefined,undefined,3,4,5,6,7]; console.log('max value with undefined is ',(Math.max.apply(null,testArr))); // max value with undefined is NaN console.log('max with arr.max()',testArr.max());

有没有合适的方法可以找到具有未定义值的稀疏数组的最大值

谢谢

var testArr=[undefined,undefined,undefined,3,4,5,6,7];
console.log('max value with undefined is ',(Math.max.apply(null,testArr)));

// max value with undefined is NaN

console.log('max with arr.max()',testArr.max());    

// Error: testArr.max is not a function     

testArr=[null,null,null,3,4,5,6,7];
console.log('max value with null is ',(Math.max.apply(null,testArr)));

// max value with null is 7

如果有一个内置的方法,我宁愿不使用forEach

您的示例中没有一个是真正的稀疏数组(它们没有任何“孔”),但您可以使用(ECMA5)来测试该值。为了获得更好的精度,ECMA6将提供。请记住,可以处理的参数数量也有限制(通常为65536个参数)。当然,可能不适合您的应用程序,如果您想要
无限
-无限
,那么您应该使用不同的测试。在当前示例中,带有负数的空字符串将是一个问题

testArr.reduce(function(a,b){
  if (isNaN(a) || a === null || a === '') a = -Infinity;
  if (isNaN(b) || b === null || b === '') b = -Infinity;
  return Math.max(a,b)
}, -Infinity);
var testArr=[未定义,3,4,5,6,7];
document.body.textContent=Math.max.apply(null,testArr.filter(函数x){
返回是有限的(x);

}));您的示例中没有一个是真正的稀疏数组(它们没有任何“孔”),但您可以使用(ECMA5)来测试该值。为了获得更好的精度,ECMA6将提供。请记住,可以处理的参数数量也有限制(通常为65536个参数)。当然,可能不适合您的应用程序,如果您想要
无限
-无限
,那么您应该使用不同的测试。在当前示例中,带有负数的空字符串将是一个问题

var testArr=[未定义,3,4,5,6,7];
document.body.textContent=Math.max.apply(null,testArr.filter(函数x){
返回是有限的(x);

}));
forEach是@DanielWeiner的一种内置方法,它可能与@DanielWeiner的一种内置方法重复,后者用于查找最大值
Math。max
尝试将其参数转换为数字。由于
undefined
被转换为
NaN
(),它将使用这些值失败。您必须对这些值进行迭代。最接近“内置”的是
数组。减少
。此外,
null
被转换为0,因此如果数组中填充了
null
s和负数,则会得到错误的答案。forEach是一种内置方法,可能与@DanielWeiner重复,后者是一种查找最大值的内置方法
Math。max
尝试将其参数转换为数字。由于
undefined
被转换为
NaN
(),它将使用这些值失败。您必须对这些值进行迭代。与“内置”最接近的是
Array。reduce
。另外,
null
被转换为0,因此如果数组中填充了
null
s和负数,您将得到错误的答案。空字符串中的负数将是一个问题。很好的捕获,我刚刚更新了我的解决方案来解释空字符串。从目前的情况来看,带负数的空字符串将是一个问题。很好,我刚刚更新了我的解决方案来解释空字符串。只需
testArr.filter(isFinite)
@georg确实如此,我在想,详细的回答可能会更好,因为不清楚
isFinite
是否是对所提问题的最佳检查。简单地说
testArr.filter(isFinite)
@georg确实如此,我在想,把它说得冗长可能会更好,因为不清楚
isFinite
是否是对所提问题的最好检查。