Tengo un objeto de matriz que se ve así:
[{ sellerId: "seller1", name: "Nike", item: [{ id: "xxx1" isChecked: false price: "719700.00" productName: "product a" quantity: 2 }, { id: "xxx2" isChecked: true price: "219700.00" productName: "product b" quantity: 1 } ], }, { sellerId: "seller2", name: "Adidas", item: [{ id: "xxx1" isChecked: false price: "49700.00" productName: "product x" quantity: 1 }, { id: "xxx2" isChecked: true price: "4700.00" productName: "product y" quantity: 5 } ], }, ]ahora quiero convertir o filtrar mis datos por isChecked = true en el objeto llamado Item, por lo que se verá así:
[{ sellerId: "seller1", name: "Nike", item: [ { id: "xxx2" isChecked: true price: "219700.00" productName: "product b" quantity: 1 } ], }, { sellerId: "seller2", name: "Adidas", item: [ { id: "xxx2" isChecked: true price: "4700.00" productName: "product y" quantity: 5 } ], }, ]EDITADO:
Y luego, SI NO hay isChecked: verdadero en un vendedor, no mostrará los datos del vendedor, por ejemplo, si no hay isChecked en el vendedor de Adidas, esperaba que el objeto se viera así:
[{ sellerId: "seller1", name: "Nike", item: [ { id: "xxx2" isChecked: true price: "219700.00" productName: "product b" quantity: 1 } ], }, ]Intenté usar lodash de esta manera, pero aún no elimino el elemento que tiene isChecked: false
_.filter(data, { item: [{ isChecked: false }] })
¿Alguna ayuda sobre cómo puedo hacer eso con lodash o simple javascript filter ()?
¡Gracias!
Puede utilizar las funciones de filtro y mapa :
sellers = data.map((d) => {return {...d, item: d.item.filter(i=>i.isChecked)}})Para los elementos vacíos, puede filtrarlos nuevamente de esta manera:
filterd_seller = sellers.filter(seller => seller.item.length)O una mejor respuesta que puede usar reduce :
data.reduce((filtered, seller) => { const item = seller.item.filter(i => i.isChecked); if (item.length) { filtered.push({...seller, item }); } return filtered; }, []);Asigne la matriz de objetos (usando lodash o vanilla) y luego recree el objeto mientras filtra cualquier elemento con isChecked: false :
const arr = [{"sellerId":"seller1","name":"Nike","item":[{"id":"xxx1","isChecked":false,"price":"719700.00","productName":"product a","quantity":2},{"id":"xxx2","isChecked":true,"price":"219700.00","productName":"product b","quantity":1}]},{"sellerId":"seller2","name":"Adidas","item":[{"id":"xxx1","isChecked":false,"price":"49700.00","productName":"product x","quantity":1},{"id":"xxx2","isChecked":true,"price":"4700.00","productName":"product y","quantity":5}]}] const result = arr.map(({ item, ...o }) => ({ ...o, item: item.filter(o => o.isChecked) })) console.log(result) .as-console-wrapper { max-height: 100% !important; top: 0; }