当Array.length = 100时,Math.min.apply(Math,Array)返回NaN

时间:2018-05-29 03:59:12

标签: javascript arrays min mathjax

使用Math.min.apply时,Array.length为10就可以了

open

enter image description here

但是当在这种情况下数组的长度更大时,长度= 100,则val是NaN,

enter image description here

UPDATE !!!!

如果我将索引名称00,01,02,03 ... 99更改为0,1,2,3,4 ... 99其工作

enter image description here

在这部分我动态创建了Array,索引名是String。 enter image description here

但是对于MAth.min的索引名称是什么问题?

2 个答案:

答案 0 :(得分:2)

在您创建阵列时,您似乎正在创建像' 01',' 02'等

这些与索引1和2不同

请参阅以下



const array1 = new Array();
const array2 = new Array();
const array3 = new Array();
array1[0] = 1;
array2['00'] = 2
array3[0] = 3
array3['00'] = 4

console.log(JSON.stringify(array1), typeof array1[0]);
console.log(JSON.stringify(array2), typeof array2[0]);
console.log(JSON.stringify(array3), typeof array3[0]);




看看array2 [0]是undefined ...现在如果你做



const array = new Array();
array['00'] = 10;
array['01'] = 9;
array['02'] = 8;
array['03'] = 7;
array['04'] = 6;
array['05'] = 5;
array['06'] = 4;
array['07'] = 3;
array['08'] = 2;
array['09'] = 1;
array['10'] = 100;
console.log(array);




查看索引10之前的所有undefined

这就是Math.min导致NaN

的原因

答案 1 :(得分:0)

您的第一个过滤器非数字值看起来您包含数组非数字值。

var filteredArr = arr.filter(function (item) {
  return !isNaN(item);
});

对于数组中的min,您应该使用

Math.min.apply(Math,array.filter(n => !isNaN(n)))