Entrada :
const array=[{key: '1', value: 'VALUE1'},{key: '2', value: 'VALUE2'},{key: '1', value: 'VALUE3'},{key: '3', value: 'VALUE4'}]
esperado :
const array=[{key: '1', value: 'VALUE1','VALUE3'},{key: '2', value: 'VALUE2'},{key:'3', value: 'VALUE4'}]
Espero que la siguiente función resuelva su problema:
var arvConcat = (r) =>{ var rr=[],or=[]; for(let ri of r){ if(typeof rr[ri.key] === 'undefined')rr[ri.key]=[]; rr[ri.key].push(ri.value); } for(let ri in rr){ or.push({key:ri,value:rr[ri]}); } return or; } let r = [{ key: '1', value: 'VALUE1' }, { key: '2', value: 'VALUE2' }, { key: '1', value: 'VALUE3' }, { key: '3', value: 'VALUE4' }]; let newR = arvConcat(r); console.log(newR);
Gracias
Puedes lograr esto usando un bucle for normal
let array = [{ key: '1', value: 'VALUE1', }, { key: '2', value: 'VALUE2', }, { key: '1', value: 'VALUE3', }, { key: '3', value: 'VALUE4', }, ]; let i = 0; while (i < array.length) { if (i + 1 <= array.length) { for (let x = i + 1; x < array.length; x++) { if (array[i].key === array[x].key) { array[i].value = `${array[x].value} ${array[i].value}`; array.splice(x, 1); } } i++ } } console.log(array);
Una forma de hacerlo es usar Object.values y reducir
//Input: const array = [{ key: '1', value: 'VALUE1' }, { key: '2', value: 'VALUE2' }, { key: '1', value: 'VALUE3' }, { key: '3', value: 'VALUE4' }] const result = Object.values(array.reduce((a,o) => { a[o.key] = a[o.key] || {'key': o.key, 'value' : []}; a[o.key]['value'].push(o.value); return a; }, {})); console.log(result);