Math.min.apply (Math, Array) возвращает NaN, когда Array.length = 100 - PullRequest
0 голосов
/ 29 мая 2018

при использовании 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));
}

enter image description here

, но когда массив большебольшой в этом случае длина = 100, значение равно NaN,

enter image description here

ОБНОВЛЕНИЕ !!!!

если я изменю индексимя от 00,01,02,03 ... 99 до 0,1,2,3,4 ... 99 его работы

enter image description here

в этой части я создал массив динамически, имя индекса - строка.enter image description here

но из-за чего имя индекса является проблемой для MAth.min?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Кажется, что когда вы создаете массив, вы создаете ключи типа '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]);

посмотрите, как массив2 [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);

посмотрите на все эти undefined до индекса 10

, поэтому Math.min приводит к NaN

0 голосов
/ 29 мая 2018

Ваш первый фильтр нечисловых значений выглядит Ваш не содержащий чисел массив значений.

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

Для минимума в массиве следует использовать

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