JavaScript减少过滤列表

JavaScript减少过滤列表,javascript,Javascript,我有一个对象数组,我想先过滤这些对象,然后再将它们的一个属性减少到累加器中 编辑:最后我想要的是一个数字 我可以这样分两步来做: let filteredList = list.filter( item => item.topLevel ) return filteredList.reduce( (a, i) => a + i.stock ), 0) 但我很时髦,而且“喜欢ES6”,所以我想在一行中完成它 帮助我堆栈溢出,我如何组合过滤和减少 编辑:对于我尝试过的记录: p

我有一个对象数组,我想先过滤这些对象,然后再将它们的一个属性减少到累加器中

编辑:最后我想要的是一个数字

我可以这样分两步来做:

let filteredList = list.filter( item => item.topLevel )
return filteredList.reduce( (a, i) => a + i.stock ), 0)
但我很时髦,而且“喜欢ES6”,所以我想在一行中完成它

帮助我堆栈溢出,我如何组合过滤和减少

编辑:对于我尝试过的记录:

    product_variations.filter( pv => pv.topLevel )
            .reduce((a, fpv) => a + fpv.stock) , 0)
它似乎返回了一个数组。我做错什么了吗

编辑:我被要求显示所需的输入和输出:

[{topLevel: true, stock: 12}, {topLevel: false, stock: 5}, {topLevel: true, stock: 10}]
// returns 22

代码中的右括号放错了位置。删除将修复它的:

const productVariations=[{
顶层:对,
股票:1
}, {
顶层:false,
股票:2
}];
const result=productVariations.filter(pv=>pv.topLevel)
.减少((a,fpv)=>a+fpv.stock,0);
控制台日志(结果)
不要在一行中执行,链接
过滤器
减少
调用会导致列表的多次迭代–执行一次迭代是明智之举

list.reduce
  ( (acc, item) =>
      Boolean (item.topLevel)
        ? acc + item.stock
        : acc
  , 0
  )

您知道吗,
filter
可以用
reduce
来编写

const过滤器=(f,xs)=>
减少
((acc,x)=>
f(x)
?[…附件,x]
:acc
, []
)
console.log(过滤器(x=>x>3[1,2,3,4,5]))

//[4,5]
可能是这样的
让filteredList=list.filter(item=>item.topLevel).reduce((a,i)=>a+i.stock),0)
对不起,我应该说得更清楚,最后我想要的是减少这个排序列表的一个属性。请共享输入数组和预期的输出数组应该可以正常工作。