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)
对不起,我应该说得更清楚,最后我想要的是减少这个排序列表的一个属性。请共享输入数组和预期的输出数组应该可以正常工作。