Вопрос из интервью интернет-знаменитости (появлялся в интервью Tencent и Baidu)

JavaScript
Вопрос из интервью интернет-знаменитости (появлялся в интервью Tencent и Baidu)

В интервью между Tencent и Baidu был такой вопрос для интервью, который ласково называли вопросом интервью с интернет-знаменитостью.Этот вопрос для интервью. Каков результат ['1', '2', '3'].map(parseInt)? Каков результат ['1', '2', '3'].fliter(parseInt)? В этом вопросе интервьюеру может понадобиться не только то, чтобы вы назвали его результаты, но и то, что вы знаете, почему такие результаты возникают.

Ключевой синтаксис

1. разобрать

2. разбор с плавающей запятой

Давайте посмотрим на синтаксис и использование parseInt и parseFloat для дальнейшего объяснения в практических примерах.

2. Карта

1. ['1', '2', '3'].map(parseInt)

['1', '2', '3'].map(parseInt)
// [1, NaN, NaN]

Фактически, при использовании карты значение индекса второго параметра обратного вызова карты становится значением системы счисления parseeInt. ['1', '2', '3'].map(parseInt) находится в процессе обхода. Фактически, он прошел через следующий процесс.

parseInt('1', 0);
parseInt('2', 1);
parseInt('3', 2);
  • parseInt('1', 0): значение системы счисления равно 0, строка оценки находится между 1 и 9, и она преобразуется в десятичную систему, и результат равен 1.
  • parseInt('2', 1): значение системы счисления равно 1. Если параметр меньше 2 или больше 36, parseInt() вернет NaN.
  • parseInt('3', 2): значение системы счисления равно 2, что означает, что строка будет разобрана на байты, которые будут содержать только значения 0 и 1. В спецификации parseInt указано, что он пытается анализировать только левую часть первого символа. Первый символ этой строки — «3», что не является допустимым числом по основанию 2. Таким образом, эта подстрока будет проанализирована как пустая. Если подстрока анализируется как пустая, функция вернет NaN.

2. ['1', '2', '3'].map(parseFloat)

['1', '2', '3'].map(parseFloat)
// [1, 2, 3]

parseFloat проще, чем parseInt, без учета второго параметра, просто проверьте, можно ли нормально преобразовать первый параметр в число.

parseFloat('1');  // 1
parseFloat('2');  // 2
parseFloat('3');  // 3

Небольшой момент знаний: как быстро преобразовать строковый массив в массив числовых типов

['1', '2', '3'].map(parseFloat)
['1', '2', '3'].map(Number)

Три, фильтр

1. ['1', '2', '3'].filter(parseInt)

['1', '2', '3'].filter(parseInt)
// ["1"]

filter вызывает функцию обратного вызова один раз для каждого элемента в массиве и создает новый массив со всеми элементами, для которых обратный вызов возвращает значение true или значение, эквивалентное true.

parseInt('1', 0);
parseInt('2', 1);
parseInt('3', 2);
  • parseInt('1', 0): значение системы счисления равно 0, строка суждения оказывается между 1 и 9, десятичная дробь преобразуется, а результат равен 1, поэтому результат обратного вызова эквивалентен true, и возвращается элемент '1'.
  • parseInt('2', 1): Значение системы счисления равно 1. Если параметр меньше 2 или больше 36, parseInt() вернет NaN, результат не эквивалентен true, и он не будет вернулся.
  • parseInt('3', 2): значение системы счисления равно 2, что означает, что строка будет разобрана на байты, которые будут содержать только значения 0 и 1. В спецификации parseInt указано, что он пытается анализировать только левую часть первого символа. Первый символ этой строки — «3», что не является допустимым числом по основанию 2. Таким образом, эта подстрока будет проанализирована как пустая. Если подстрока анализируется как пустая, функция вернет NaN.

2. ['1', '2', '3'].filter(parseFloat)

['1', '2', '3'].filter(parseFloat)
// ["1", "2", "3"]

При использовании parseFloat каждый элемент результата после обхода эквивалентен true, поэтому возвращаются все.

4. Отражение

Через приведенную выше карту и фильтр мы думаем о других методах массивов.При использовании parseInt или parseFloat вместо обратного вызова вам нужно только понять принцип работы parseInt и parseFloat, тогда для такого рода задач результаты могут быть выведены быстро Да, вы также можете применить приведенный выше анализ, чтобы ответить интервьюеру. Такие вопросы на собеседовании не проблема.