в задании на входе вы получаете подобные массивы:
["3:5", "4:2", "8:7"]
функция, передаваемая в
.reduce()
, имеет 2 обязательных параметра (accumulator, currentValue) и 2 необязательных (index, array).
здесь
.reduce((a, [x, _, y])
в качестве второго параметра (currentValue) выступает
[x, _, y]
.
если мы применим
.reduce()
к массиву, который я представил в самом начале ответа, в качестве
currentValue
будут выступать следующие значения:
далее, в действие вступает
деструктурирующее присваивание, которое будет применено к каждому из элементов массива (по некоторым причинам оно работает и со строками).
это можно интерпретировать как:
// используется 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" */