Tengo una matriz inicial de objetos en la siguiente estructura:
let sampleArray = [ { chairperson: 'Sample person' }, { chairperson: 'Sample person 2' }, { arbitratorClaimant: 'Sample person 3' }, { arbitratorRespondent: 'Sample person 4' }, { secretary: 'Sample person 5' } ]estoy usando
Object.assign({}, ...sampleArray)para combinar la matriz de objetos en un solo objeto, pero dado que el objeto no puede tener claves duplicadas, sobrescribe el primer presidente ('Persona de muestra') con el segundo presidente. En cambio, me gustaría generar una matriz con múltiples objetos donde los objetos con claves duplicadas se colocan en el siguiente objeto de la matriz. Por ejemplo, esto es lo que estoy buscando:
[ { chairperson: 'Sample person', arbitratorClaimant: 'Sample person 3', arbitratorRespondent: 'Sample person 4', secretary: 'Sample person 5' }, { chairperson: 'Sample person 2' } ]es posible?
Esta es, todavía no, una respuesta, sino un intento de discutir el resultado deseado.
¿Qué tal crear un resultado como el siguiente:
{ chairperson: ['Sample person','Sample person 2'], arbitratorClaimant: 'Sample person 3', arbitratorRespondent: 'Sample person 4', secretary: 'Sample person 5' }Mirando tu comentario, tal vez lo siguiente podría funcionar para ti:
{ chairperson: 'Sample person, Sample person 2', arbitratorClaimant: 'Sample person 3', arbitratorRespondent: 'Sample person 4', secretary: 'Sample person 5' } En lugar de " , " se puede elegir cualquier otro separador para listas de varios nombres
En este ejemplo, la collated es similar a la primera estructura de datos alternativa de @CarstenMassmann. Es muy posible que esta sea una forma demasiado complicada de hacerlo, pero la segunda parte del código esencialmente gira (creo que ese es el término correcto) los datos recopilados para que puedan usarse para las filas de la tabla.
let sampleArray = [ { chairperson: 'Sample person' }, { chairperson: 'Sample person 2' }, { arbitratorClaimant: 'Sample person 3' }, { arbitratorRespondent: 'Sample person 4' }, { secretary: 'Sample person 5' } ]; const merge_objects = (obj1, obj2) => Object.entries(obj2).reduce( (acc, [key, val]) => Object.assign(acc, { [key]: (acc[key] ?? []).concat(val) }), obj1 ); const collated = sampleArray.reduce( (acc, val) => merge_objects(acc, val), {} ); const max_item_count = (input) => Math.max( ...Object.values(input).map((arr) => arr.length) ); const get_table_rows = (input) => Array .from({ length: max_item_count(input) }) .map( (row, index) => Object.fromEntries( Object.entries(collated) .map(([key, val]) => [key, collated[key][index] ?? null]) .filter(([key, val]) => val) ) ); console.log( JSON.stringify(get_table_rows(collated)) );