De esta matriz de objetos, me gustaría obtener varias matrices que contengan los objetos que tienen los mismos valores para la propiedad "id":
var obj1 = { id: 1, name: "apple"}; var obj2 = { id: 2, name: "pear"}; var obj3 = { id: 3, name: "melon"}; var obj4 = { id: 4, name: "cherry"}; var obj5 = { id: 2, name: "banana"}; var obj6 = { id: 1, name: "pinapple"}; var obj7 = { id: 1, name: "peach"}; var array = [obj1, obj2, obj3, obj4, obj5, obj6, obj7];Ejemplo de las matrices que me gustaría recuperar:
[{ id: 1, name: "apple" }, { id: 1, name: "pinapple" }, { id: 1, name: "peach" }] [{ id: 2, name: "pear" }, { id: 2, name: "banana" }]Hay una función de utilidad groupBy en una biblioteca como lodash que puede usar; de lo contrario, tendría que escribir su propia versión de eso. se vería algo como
function myGroupById (array) { const group = {}; array.forEach(elem => { group[elem.id] = group[elem.id] || []; group[elem.id].push(elem) }) return group; } function extractDuplicatesOnly(array) { for (const obj in array) { if (array[obj].length < 2) { delete array[obj]; } } return array; } myArray = myGroupById(myArray); myArray = extractDuplicatesOnly(myArray); console.log(myArray);aplicar eso a sus datos producirá un objeto que se ve así:
{ 1: [ { id: 1, name: "apple" }, { id: 1, name: "pinapple" }, { id: 1, name: "peach" }, ], 2: [ { id: 2, name: "pear" }, { id: 2, name: "banana" }, ] };