我想按值将对象键/值对过滤到对象数组中,最简洁的方法是什么?
输入数据
{
a: 0
b: 0
c: 2
d: 1
}
基于任何非 0 值的输出数据
[
{name:"c", value:2},
{name:"d", value:1}
]
这里是对对象条目使用filter
和map
的解决方案。Object.entries
返回一个[key,value]
对的数组,即本例中的[["a", 0], ["b", 0], ["c", 2], ["d", 1]]
。首先,我过滤掉没有值的条目,然后0
映射结果数组并以您想要的格式返回
let a = { a: 0, b: 0, c: 2, d: 1}
let r = Object.entries(a).filter(([k,v]) => v!==0).map(([name,value])=>({name,value}))
console.log(r)
以及使用reduce
在这里我正在检查该值是否在循环内0
,如果不是,则添加到累加器中.
我建议reduce
因为它只循环一次条目数组。而在第一个阶段,它必须在filter
和map
阶段分别循环。
let a = {a: 0,b: 0,c: 2,d: 1}
let r = Object.entries(a).reduce((acc,[name,value]) => {
if(value !==0)acc.push({name,value})
return acc
},[])
console.log(r)