В интервью между 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, тогда для такого рода задач результаты могут быть выведены быстро Да, вы также можете применить приведенный выше анализ, чтобы ответить интервьюеру. Такие вопросы на собеседовании не проблема.