Первый аргумент, передаваемый для сокращения, является функцией обратного вызова.
Имеется два параметра аккумулятора (в данном случае x) и currentValue (в данном случае y)
Reduce будет выполнять итерацию по массиву. При каждом запуске все, что возвращается, является новым значением для аккумулятора, currentValue - это любой элемент, находящийся на текущей итерации, поэтому на первой итерации это будет 10.
Второй параметр (есть и другие, но в этом случае) является значением по умолчанию для
аккумуляторы, в данном случае пустой массив. если бы массив в качестве значения по умолчанию не был предоставлен, у нас возникла бы проблема, так как первый элемент массива используется в качестве начального значения аккумулятора, если не указано значение по умолчанию, и мы не можем добавить число.
Для большей ясности я собираюсь немного расширить код
var arr = [10,10, 8000, 8000, 2, 17]
var unique = arr.reduce((x, y) => {
// does the array x include the value y
if(x.includes(y){
// We want an array with no duplicates, so we don't append y to the array, by
// simply returning x
return x;
}
// if we made it hear it must mean y is unique value so we want to add it to the
// array, so we want to return x with y include. We don't want to mutate x, so
// return a new array with all the elements of x and y at the end
// we do this using the spread operator(...) it will copy all elements of x into
// the new array
return [...x, y]
}, []);
console.log(unique)