Quiero filtrar los pares clave/valor de un objeto a una matriz de objetos por valor, ¿cuál es la forma más concisa de hacerlo?
datos de entrada
{ a: 0 b: 0 c: 2 d: 1 }datos de salida basados en cualquier valor que no sea 0
[ {name:"c", value:2}, {name:"d", value:1} ]aquí hay una solución usando filter y map en las entradas de objetos. Object.entries devuelve una matriz de pares [key,value] , es decir [["a", 0], ["b", 0], ["c", 2], ["d", 1]] para este ejemplo . Primero filtro las entradas sin valor 0 , luego mapeo a través de la matriz de resultados y regreso en el formato que desea
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) y una solución usando reduce
aquí estoy comprobando si el valor es 0 dentro del ciclo y agregando al acumulador si no lo es.
Recomendaría reduce ya que recorre la matriz de entradas solo una vez. Mientras que en el primero tiene que hacer un bucle por separado para las etapas de filter y 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)