Tengo un objeto que se parece a esto:
const object = { User 1 Fecha de Nacimiento: "02/05/2000", User 1 Porcentage: 25, User 1 Primer Apellido: "Gonzalez", User 1 Segundo Apellido: "Perez", User 1 Sexo: "H", User 1 nombre: "Manuel", User 2 Fecha de Nacimiento: "02/05/2000", User 2 Porcentage: 25, User 2 Primer Apellido: "Diaz", User 2 Segundo Apellido: "Rodriguez", User 2 Sexo: "M", User 2 nombre: "Pepa", }Me gustaría manipular este objeto para que se transforme en una matriz que se parece a esta base en la información de cada usuario (es decir, 1 o 2):
const arrayOfObjects = [ { Fecha de Nacimiento: "02/05/2000", Porcentage: 25, Primer Apellido: "Gonzalez", Segundo Apellido: "Perez", Sexo: "H", Nombre: "Manuel" }, { Fecha de Nacimiento: "02/05/2000", Porcentage: 25, Primer Apellido: "Diaz", Segundo Apellido: "Rodriguez", Sexo: "M", Nombre: "Pepa" } ];Necesitaré tener una función de ayuda para hacerlo, de modo que pueda almacenarlo en un estado de reacción (componente funcional)
const srcObject = { "User 1 Fecha de Nacimiento": "02/05/2000", "User 1 Porcentage": 25, "User 1 Primer Apellido": "Gonzalez", "User 1 Segundo Apellido": "Perez", "User 1 Sexo": "H", "User 1 nombre": "Manuel", "User 2 Fecha de Nacimiento": "02/05/2000", "User 2 Porcentage": 25, "User 2 Primer Apellido": "Diaz", "User 2 Segundo Apellido": "Rodriguez", "User 2 Sexo": "M", "User 2 nombre": "Pepa", } const transformData = (src) => { const results = []; Object.keys(src).forEach(key => { const split = key.split(/^User (\d+) /).filter(i => i !== '') const index = +split[0] - 1 const newKey = split[1] if (!results[+index]) { results[+index] = {} } results[+index][newKey] = src[key] }) return results } console.log(transformData(srcObject)) var obj = { "User 1 Fecha de Nacimiento": "02/05/2000", "User 1 Porcentage": 25, "User 1 Primer Apellido": "Gonzalez", "User 1 Segundo Apellido": "Perez", "User 1 Sexo": "H", "User 1 nombre": "Manuel", "User 2 Fecha de Nacimiento": "02/05/2000", "User 2 Porcentage": 25, "User 2 Primer Apellido": "Diaz", "User 2 Segundo Apellido": "Rodriguez", "User 2 Sexo": "M", "User 2 nombre": "Pepa", } const getPrefixAndSuffix = (str = "", value) => { //console.log("::", str) var index = str.indexOf(' ', str.indexOf(' ') + 1); var firstChunk = str.substr(0, index); var secondChunk = str.substr(index + 1); return { prefix: firstChunk, suffix: secondChunk, value: value } } function groupBy(list, keyGetter) { const map = new Map() list.forEach(item => { const key = keyGetter(item) const collection = map.get(key) if (!collection) { map.set(key, [item]) } else { collection.push(item) } }) return map } const getAsList = (groups = {}) => { const valuesArr = [] groups.forEach((value, key, map) => { var resultObj = {} value.forEach(value => { resultObj[value.suffix] = value.value }) valuesArr.push(resultObj) }); return valuesArr } const getFormatted = (obj) => { const asSplitList = Object.keys(obj).map((key) => { return getPrefixAndSuffix(key, obj[key]) }) const groupedItems = groupBy(asSplitList, (it) => it.prefix) return groupedItems } var format = getFormatted(obj) const finalList = getAsList(format) console.log(finalList) const object = { "User 1 Fecha de Nacimiento": "02/05/2000", "User 1 Porcentage": 25, "User 1 Primer Apellido": "Gonzalez", "User 1 Segundo Apellido": "Perez", "User 1 Sexo": "H", "User 1 nombre": "Manuel", "User 2 Fecha de Nacimiento": "02/05/2000", "User 2 Porcentage": 25, "User 2 Primer Apellido": "Diaz", "User 2 Segundo Apellido": "Rodriguez", "User 2 Sexo": "M", "User 2 nombre": "Pepa", } var obj = {}; for (const [key, value] of Object.entries(object)) { let splitedData = key.match(/User\s\d/); if (splitedData) { let user = splitedData[0]; if (!obj[user]) obj[user] = {}; let prop = key.replace(/User\s\d/i, '').trim(); obj[user][prop] = value; } } let outPut = Object.values(obj); console.log(outPut);