Cómo transformar esta matriz de elementos en una matriz de resultados (los objetos deben tener una identificación única y tener 'nombres' clave con una matriz de propiedades de nombre de objetos con la misma identificación):
matriz original:
const items = [ {id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}, {id: 1, name: 'd'}, {id: 3, name: 'f'} ];Matriz transformada:
const result = [ {id: 1, names: ['a', 'd']}, {id: 2, names ['b']}, {id: 3, names: ['c', 'f']} ];Puede usar Array.reduce para obtener el resultado.
const inputArray = [ {id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}, {id: 1, name: 'd'}, {id: 3, name: 'f'} ]; const result = inputArray.reduce((acc, item) => { const exist = acc.find(e => e.id == item.id); // check exist in result if (exist) { // exist: push 'name' value to 'names' array exist['names'].push(item.name); } else { // not exist: create new item in result acc.push({ 'id': item.id, 'names': [item.name] }); } return acc; }, []); console.log(result);