Почему в данном коде необходимо нижнее подчёркивание?

Решал на codewars одно из заданий и смотря решения увидел пример его выполнения таким образом. Мой вопрос: зачем нужно в массиве нижнее подчёркивание и почему без него код не работает?
const points = g => g.reduce((a, [x, _, y]) => a + (x > y ? 3 : x == y), 0)
  • Вопрос задан
  • 445 просмотров
Решения вопроса 1
Alexandre888
@Alexandre888
Javascript-разработчик
в задании на входе вы получаете подобные массивы: ["3:5", "4:2", "8:7"]
функция, передаваемая в .reduce(), имеет 2 обязательных параметра (accumulator, currentValue) и 2 необязательных (index, array).

здесь .reduce((a, [x, _, y]) в качестве второго параметра (currentValue) выступает [x, _, y].

если мы применим .reduce() к массиву, который я представил в самом начале ответа, в качестве currentValueбудут выступать следующие значения:
  • "3:5"
  • "4:2"
  • "8:7"

далее, в действие вступает деструктурирующее присваивание, которое будет применено к каждому из элементов массива (по некоторым причинам оно работает и со строками).
это можно интерпретировать как:
// используется 1 элемент массива //
let x, _, y;

[x, _, y] = "3:5";
/* x === "3", _ === ":", y === "5"  */

// используется 2 элемент массива //
let x, _, y;

[x, _, y] = "4:2";
/* x === "4", _ === ":", y === "2"  */

// используется 3 элемент массива //
let x, _, y;

[x, _, y] = "8:7";
/* x === "8", _ === ":", y === "7"  */

отвечая на ваш вопрос, "почему необходимо нижнее подчёркивание" - автор решения использует его для того, чтобы пропустить неиспользуемый элемент - двоеточие, которое остаётся неизменным на протяжении всего выполнения кода и в решении не фигурирует.

вы можете заменить _ на любое другое валидное название переменной, чтобы убедиться, что оно не используется.
или же, как в следующем примере, добавить запятую, чтобы проигнорировать это значение:
let x, y;

[x, ,y] = "5:3";
/* x === "5", y === "3" */
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Подчёркивание в JS - допустимое имя переменной. Вы можете заменить его на любое другое неиспользуемое имя.
Автор кода, скорее всего, хотел показать, что деструктурируемое значение в дальнейшем не используется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы