Это (ab) использование оператора запятой, который берет список разделенных запятыми выражений, оценивает первое (ие) выражение (я), отбрасывает их, а затем все (...)
разрешается до значения конечного выражения,Обычно это происходит только в IMO автоматического минимизации, поскольку синтаксис выглядит запутанным.
.reduce
там
return titles.reduce((obj, title, index) => ((obj[title] =
values[index]), obj), {});
эквивалентно
return titles.reduce((obj, title, index) => {
obj[title] = values[index];
return obj;
}, {});
что имеет гораздо больший смысл - он превращает массив заголовков (например, ['foo', 'bar']
) и массив значений (например, ['fooVal', 'barVal']
) и использует .reduce
для преобразования их в один объект, { foo: 'fooVal', bar: 'barVal' }
.
Первым аргументом для обратного вызова .reduce
является начальное значение аккумулятора (второй аргумент .reduce
) или значение, которое было возвращено на последней итерации - приведенный выше код передает {}
в качестве начального значения, присваивает свойство объекту и возвращает объект на каждой итерации..reduce
- это обычно наиболее подходящий метод для превращения массива в объект, но если вы более знакомы с forEach
, код эквивалентен
const obj = {};
titles.forEach((title, index) => {
obj[title] = values[index];
});
return obj;
Хотя оператор запятых может быть полезен при игре в код, это, вероятно, не то, что следует использовать при попытке написать хороший читаемый код.