Aquí está la imagen de mis datos que tengo:
Estoy tratando de obtener una matriz de objetos, que se verá así:
[{ length: 2, item: { imgSource: "/sushi/test2.png" ingredients: "Nori, Cucumber, Rice, Cream cheese, Sesame, Unagi sauce" name: "sushi1" price: 133 weight: 120} }, { length: 1, item: { imgSource: "/sushi/test1.png" ingredients: "Salmon, Nori, Cucumber, Rice, Cream cheese" name: "sushi2" price: 119 weight: 120} }]
La mejor manera que se me ocurre es usar la función de reduce
, pero no tengo idea de cómo usarla correctamente, ¿alguien puede ayudarme?
Haga un bucle a través de todos los elementos de su matriz
Compare los objetos del elemento actual y la matriz de resultados ( ¿Cómo determinar la igualdad de dos objetos de JavaScript? )
Si se encuentra el mismo elemento, aumente el valor "longitud" de esa matriz de resultados.
Si no se encuentra, agregue un nuevo elemento a la matriz de resultados con la longitud = 1
Es bastante simple en realidad:
var items = [ [{ imgSource: "/sushi/test2.png", ingredients: "Nori, Cucumber, Rice, Cream cheese, Sesame, Unagi sauce", name: "sushi1", price: 133, weight: 120, }, { imgSource: "/sushi/test2.png", ingredients: "Nori, Cucumber, Rice, Cream cheese, Sesame, Unagi sauce", name: "sushi1", price: 133, weight: 120, }], [{ imgSource: "/sushi/test1.png", ingredients: "Salmon, Nori, Cucumber, Rice, Cream cheese", name: "sushi2", price: 119, weight: 120, }] ] items = items.reduce(function(carry, item) { if (!carry.hasOwnProperty(item.name)) { carry.push({ count: item.length, item: item[0] }) } return carry; }, []) console.log(items)