用reduce es6替换filter和map

Mic*_*eal 5 javascript ecmascript-6

我试图避免与过滤器和映射链接,但为什么我的reduce 返回未定义?

const data = [{
        value: "moto",
        passed: true
    },{
        value: "boat",
        passed: false
    }, {
        value: "car",
        passed: true
    }]

    // expected ['moto', 'car']
    // using filter and map
    data.filter(obj => obj.passed).map(obj => obj.value)
Run Code Online (Sandbox Code Playgroud)

怎么了? data.reduce((accum, obj) => obj.checked && [...accum, obj.value], [])

phi*_*ipp 2

 (accum, obj) => obj.checked && [...accum, obj.value]
Run Code Online (Sandbox Code Playgroud)

如果未检查对象,则不返回过滤列表。

(accum, obj) => {
  if (obj.checked) accum.push(obj.value)
  return accum;
}
Run Code Online (Sandbox Code Playgroud)

因为减速器功能会做到这一点。

或者将其保留为一行行,而不保持可读性:

(accum, obj) => obj.checked ? [...accum, obj.value] : accum;
Run Code Online (Sandbox Code Playgroud)