JavaScript 1.6 Array.map () и Array.filter () не работающий с созданным в функциях как аргументы

Это хорошо работает:

["655971", "2343", "343"].map(function(x) { return parseInt(x) }) // [655971, 2343, 343]

Но это не делает:

["655971", "2343", "343"].map(parseInt) // [655971, NaN, NaN]

То же происходит для Array.filter ()

Что я пропускаю здесь?

8
задан bucabay 15 April 2010 в 18:01
поделиться

3 ответа

Это потому, что map передает в функцию обратного вызова больше аргументов, чем просто элемент массива. Вы получите:

callback(item, index, array)

Обычно ваша функция просто игнорирует аргументы, которые ей не нужны. Но parseInt принимает необязательный второй параметр:

parseInt(string, base)

для первого вызова, base - это индекс 0 . Это работает нормально, потому что ECMAScript определяет, что base = 0 то же самое, что и опускание аргумента, и, следовательно, допускает десятичное, восьмеричное или шестнадцатеричное (в данном случае использование десятичного числа).

Для второго и третьего элементов база равна 1 или 2 . Он пытается проанализировать число как основание-1 (которого не существует) или основание-2 (двоичное). Поскольку первое число в строке - это цифра, которой нет в этих основаниях, вы получите NaN .

В общем, parseInt без базы в любом случае довольно сомнительный, так что вы, вероятно, захотите:

["655971", "2343", "343"].map(function(x) { return parseInt(x, 10) })
22
ответ дан 5 December 2019 в 05:55
поделиться

Проблема в том, что map ожидает, что обратный вызов должен быть функцией, которая принимает три аргумента, callbackfn (значение, индекс, массив) .

Второй аргумент конфликтует с аргументом radix функции parseInt (string, radix) .

Карта вызывает parseInt для каждого элемента следующим образом:

parseInt("655971",0); // 655971
parseInt("2343", 1);  // NaN
parseInt("343", 2);   // NaN

Первый работает, потому что если основание системы счисления не определено или равно 0, предполагается, что оно равно 10.

5
ответ дан 5 December 2019 в 05:55
поделиться

Array.Filter принимает функцию, которая возвращает информацию о том, удовлетворяет ли оцениваемый элемент условию. IsNumeric будет работать для того, что вы хотите.

http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

1
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: