Оператор запятой часто полезен при написании функционального кода в Javascript.
Рассмотрим код, который я написал для SPA некоторое время назад, который имел что-то вроде
const actions = _.chain(options)
.pairs() // 1
.filter(selectActions) // 2
.map(createActionPromise) // 3
.reduce((state, pair) => (state[pair[0]] = pair[1], state), {}) // 4
.value();
Это былодовольно сложный, но реальный сценарий.Терпите меня, пока я объясняю, что происходит, и в процессе приводим аргументы в пользу оператора запятой.
При этом используется
Подчеркивание в цепочке к
Разберите все опции, переданные этой функции, используя pairs
, что превратит { a: 1, b: 2}
в [['a', 1], ['b', 2]]
Этот массив пар свойств фильтруется по тому, какие из них считаются «действиями» в системе.
Затем второйИндекс в массиве заменяется функцией, которая возвращает обещание, представляющее это действие (используя map
)
Наконец, вызов reduce
объединит каждый «массив свойств» (['a', 1]
) обратно в конечный объект.
Конечным результатом является преобразованная версия аргумента options
, который содержит только соответствующие ключи и значения которого используются вызывающей функцией.
Рассматривая только
.reduce((state, pair) => (state[pair[0]] = pair[1], state), {})
Вы можете видеть, что функция Reduce начинается с пустого объекта состояния, state
, и для каждой пары, представляющей ключ и значение, функция возвращает один и тот же объект state
последобавление свойства к объекту, соответствующему паре ключ / значение.Из-за синтаксиса функции стрелки ECMAScript 2015 тело функции является выражением, и в результате оператор запятой допускает лаконичную и полезную функцию "iteratee" .
Лично я сталкивался с многочисленными случаями при написании Javascript в более функциональном стиле с ECMAScript 2015 + Arrow Functions.Сказав это, до того, как я столкнулся с функциями стрелок (например, во время написания вопроса), я никогда не использовал оператор запятой каким-либо преднамеренным образом.