用Java编写功能代码时,逗号运算符通常非常有用。
考虑一下我为SPA写的这段代码,其中包含以下内容
const actions = _.chain(options)
.pairs() // 1
.filter(selectActions) // 2
.map(createActionPromise) // 3
.reduce((state, pair) => (state[pair[0]] = pair[1], state), {}) // 4
.value();
这是一个相当复杂但真实的场景。在我解释发生了什么时,请耐心等待,在此过程中,请为逗号运算符辩护。
这使用Underscore的链接来
分解传递给此函数的所有选项,使用pairs 它将{ a: 1, b: 2}变成[['a', 1], ['b', 2]]
此属性对数组将被系统中被视为“操作”的属性对过滤。
然后,将数组中的第二个索引替换为一个函数,该函数返回表示该操作的Promise(使用map)
最后,对的调用reduce会将每个“属性数组”(['a', 1])合并回最终对象。
最终结果是options参数的转换版本,该参数仅包含适当的键,并且其值可由调用函数使用。
看着只是
.reduce((state, pair) => (state[pair[0]] = pair[1], state), {})
您可以看到reduce函数以一个空状态对象开始state,并且对于每个代表键和值的对,该函数state在将属性添加到与键/值对相对应的对象后,会返回相同的对象。由于ECMAScript 2015的箭头函数语法,函数主体是一个表达式,因此,逗号运算符允许使用简洁而有用的“ iteratee”函数。
就个人而言,我在使用ECMAScript 2015 + Arrow Functions以更实用的样式编写Javascript时遇到了很多情况。话虽如此,在遇到箭头函数之前(例如在编写问题时),我从未以任何故意的方式使用逗号运算符。