Tengo un conjunto de datos como el siguiente.
[ {-a: '-ess. (form feminine singular nouns.)'}, {-a: '(form the feminine singular adjectives.)'}, {-a: '(form the second-person singular.)'}, {-aba: 'first-person singular'}, {-aba: 'third-person singular'}, ... ]Quiero tener un objeto que deba convertirse al formato de un solo objeto, como el siguiente.
{ -a: '(form the second-person singular.)', -aba: 'third-person singular', ... } Lo anterior es el resultado de Object.assign({}, ...array) .
Pero aquí falta algo, sí, algunos datos se han recortado accidentalmente de los datos originales anteriores. Este no es un resultado deseado.
Ahora tengo un obj que tiene un valor combinado (de alguna manera) en cada clave. El siguiente es un ejemplo que preferiría.
{ -a: '-ess. (form feminine singular nouns.)\n(form the feminine singular adjectives.)\n(form the second-person singular.)', -aba: 'first-person singular\nthird-person singular', ... }Entonces, ¿cómo puedo lograr esto? Gracias.
Puede usar Array.reduce(...) en sus datos y luego recorrer cada objeto para agregarlos al valor reducido en consecuencia.
Además, su matriz original necesita algunas " comillas " en las claves de objeto; de lo contrario, no se ejecutará:
const DATA = [ {"-a": '-ess. (form feminine singular nouns.)'}, {"-a": '(form the feminine singular adjectives.)'}, {"-a": '(form the second-person singular.)'}, {"-aba": 'first-person singular'}, {"-aba": 'third-person singular'}, ]; const merge = (data) => { // reduce the array down to a single object return data.reduce((acc, curr) => { // loop over the entries of each object Object.entries(curr).forEach(([key, value]) => { // if this key already exists, append to it with \n if(acc[key] != null) { acc[key] += `\n${value}`; // else, just add it as is } else { acc[key] = value; } }); return acc; }, {}); } console.log(merge(DATA));Podrías hacer algo como:
const input = [ { "-a": '-ess. (form feminine singular nouns.)' }, { "-a": '(form the feminine singular adjectives.)' }, { "-a": '(form the second-person singular.)' }, { "-aba": 'first-person singular' }, { "-aba": 'third-person singular' } ]; // option 1: store values in array const output1 = input.reduce((outObj, item) => { const [key, value] = Object.entries(item)[0]; if (outObj[key]) { outObj[key].push(value); } else { outObj[key] = [value]; } return outObj; }, {}); console.log(output1); // option 2: store values in a single string function myFunc(arr, separator) { return arr.reduce((outObj, item) => { const [key, value] = Object.entries(item)[0]; if (outObj[key]) { outObj[key] += `${separator}${value}`; } else { outObj[key] = value; } return outObj; }, {}); } const output2a = myFunc(input, '\n'); const output2b = myFunc(input, ' | '); console.log(output2a); console.log(output2b);