【问题标题】:Math.min.apply(Math,Array) return NaN when Array.length = 100Math.min.apply(Math,Array) 当 Array.length = 100 时返回 NaN
【发布时间】:2018-11-07 14:56:19
【问题描述】:

当使用 Math.min.apply 且 Array.length 为 10 时可以

getAllIndexes(arr, val) {
var indexes = [], i = -1;
while ((i = arr.indexOf(val, i+1)) != -1){
    indexes.push(i);
}
return indexes;
}

 arrayMinIndex(array) {
return this.getAllIndexes(array, Math.min.apply(Math,array));
}

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

更新!!!!

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

在这部分我动态创建了数组,索引名称是一个字符串。

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

【问题讨论】:

  • 请创建一个工作示例
  • 您的数组必须在某处保存非数值。
  • 他修改了整个数组,都是数字,
  • 你确定没有空槽吗?
  • 对不起,我查过了,我问

标签: javascript arrays min mathjax


【解决方案1】:

似乎在创建数组时,您正在创建诸如“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

【讨论】:

  • 哇,你是对的,我从没想过这是可能的,现在我整晚都能够解决这个问题 XD 非常感谢
  • 一个数组是一个对象,所以它可以添加任何属性......并且'01''1'不同......但在一个数组中,'1'是被视为实际索引,而 '01' 不是
  • 那我需要去掉 01 放 1 吗?
  • 我不知道数组的填充位置...但是,如果键值为'01',那么您可以parseInt(v, 10) - 如果持有01 的变量被命名为@987654333 @ .... 再次,我看不到你的代码在哪里填充了数组,所以,你可以自己弄清楚
  • 是的,非常感谢:D
【解决方案2】:

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

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

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

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

【讨论】:

  • parseInt 它们必须是整数吗?
  • 抱歉,我错了,我已使用您的代码帮助更新了我的代码。谢谢@JaromandaX
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 2020-08-03
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多