Интересно, что на самом деле делает эта функция .split ('') .map (x => + x); - PullRequest
0 голосов
/ 08 октября 2018

Я видел эту строку кода в исправлении в игре кодирования

const tC = readline().split(' ').map(x => +x);

Интересно, что она делает, потому что, когда я регистрирую эту функцию, она воспроизводит то же самое, что эта

const tC = readline().split(' ').map(x => x);

но остальная часть кода не работает

Контекст:

/** Temperatures (easy) https://www.codingame.com/training/easy/temperatures
 * Solving this puzzle validates that the loop concept is understood and that
 * you can compare a list of values.
 * This puzzle is also a playground to experiment the concept of lambdas in
 * different programming languages. It's also an opportunity to discover
 * functional programming.
 *
 * Statement:
 * Your program must analyze records of temperatures to find the closest to
 * zero.
 *
 * Story:
 * It's freezing cold out there! Will you be able to find the temperature
 * closest to zero in a set of temperatures readings?
**/
const N = +readline();
const tC = readline().split(' ').map(x => +x);

let min = Infinity;

for (let i in tC) {
    (Math.abs(tC[i]) < Math.abs(min) || tC[i] === -min && tC[i] > 0) && (min = tC[i]);
}

print(min || 0);

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

function readLine(){
  return "123456"
}

var result = readLine().split("").map(x => +x)

console.log(result)

readLine().split("") // разбивает строку в массив следующим образом ["1", "2", "3", "4", "5Метод "," 6 "]

.map(x => +x) // map возвращает новый массив, который будет принимать каждый элемент, и дает новый массив, здесь число меняется сСтрока в числа следующим образом [1, 2, 3, 4, 5, 6], так как используется + x

// выше написано в es6, который может быть переписан вes5 следующим образом

readLine().split("").map(function(x) {
  return +x
})

// Примечание

В es6, если нам нужно передать одну вещь, мы можем избежать функции (x) для x

также мы можем удалить {} [фигурные скобки и вернуть тоже] {return +x} до +x

ES2015

readLine().split("").map(function(x) {
  return +x
})

ES2016

readLine().split("").map(x => +x);
0 голосов
/ 08 октября 2018

Согласно этому сайту ниже приведены входные данные, которые программа должна получить

Строка 1: N, количество анализируемых температур

Строка 2: строка сN температур, выраженных в виде целых чисел в диапазоне от -273 до 5526

Позвольте мне построчно комментировать правила игры

// Line 1: reads number temperature inputs. + converts to number
const N = +readline();
// Line 2: reads string of temperatures.
// tC contains an array of temperatures of length N in numbers. + converts to number
const tC = readline().split(' ').map(x => +x);

let min = Infinity;
// iterate over tC array
for (let i in tC) {
    // If two numbers are equally close to zero, positive integer has to be considered closest to zero
    // set min = current iterating number if it matches above condition
    (Math.abs(tC[i]) < Math.abs(min) || tC[i] === -min && tC[i] > 0) && (min = tC[i]);
}

print(min || 0);

Вот рабочая демонстрация в javascript

изменено, чтобы сделать его понятным для начинающих.

// Line 1: reads number temperature inputs. + converts to number
// const N = +readline(); SAMPLE ALTERNATIVE
const N = +"5";
// Line 2: reads string of temperatures.
// tC contains an array of temperatures of length N in numbers. + converts to number
// const tC = readline().split(' ').map(x => +x); SAMPLE ALTERNATIVE
const tC = "1 -2 -8 4 5".split(' ').map(x => +x);

let min = Infinity;
// iterate over tC array
for (let i in tC) {
    // If two numbers are equally close to zero, positive integer has to be considered closest to zero
    // set min = current iterating number if it matches above condition
    (Math.abs(tC[i]) < Math.abs(min) || tC[i] === -min && tC[i] > 0) && (min = tC[i]);
}

console.log(min || 0);
0 голосов
/ 08 октября 2018

.map(x => +x) преобразует все элементы в массиве в число.И возвращает новый массив с этими преобразованными значениями.

Если вы измените его на .map(x => x), то значения останутся нетронутыми, и вы просто создадите копию исходного массива.Таким образом, строки остаются строками, которые нарушают код, если ожидаются числа.

Лично я бы избегал синтаксиса +x и использовал бы более многословный Number(x) и написал бы либо .map(x => Number(x)), либо .map(Number).

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