Estoy tratando de cambiar el nombre de las claves de esta matriz:
'oldname': [ {"name": "cat", "category": "animal"} ,{"name": "dog", "category": "animal"} ,{"name": "pig", "category": "animal"} ], 'oldname1': [ {"name": "pikachu", "category": "pokemon"} ,{"name": "Arbok", "category": "pokemon"} ,{"name": "Eevee", "category": "pokemon"} ]Probé con este código:
const obj = {oldKey: Object.values(result)}; delete Object.assign(results, {newname: obj.oldKey})['oldname']; console.log(result);pero lo estoy haciendo mal porque no necesitamos afectar el valor, debería ser algo como esto:
'newname': [ {"name": "cat", "category": "animal"} ,{"name": "dog", "category": "animal"} ,{"name": "pig", "category": "animal"} ], 'newname1': [ {"name": "pikachu", "category": "pokemon"} ,{"name": "Arbok", "category": "pokemon"} ,{"name": "Eevee", "category": "pokemon"} ]¿Hay alguna manera mejor de hacerlo usando javascript?
Si no desea crear una nueva variable/matriz, puede usar un bucle for..of y Object.entries() de la siguiente manera:
const input = { 'oldname': [ {"name": "cat", "category": "animal"} ,{"name": "dog", "category": "animal"} ,{"name": "pig", "category": "animal"} ], 'oldname1': [ {"name": "pikachu", "category": "pokemon"} ,{"name": "Arbok", "category": "pokemon"} ,{"name": "Eevee", "category": "pokemon"} ] }, mapping = {'oldname':'newname','oldname1':'newname1'}; for(let [key,value] of Object.entries(input)) { input[mapping[key]] = value; delete input[key]; } console.log( input );De lo contrario, puedes hacerlo de la siguiente manera:
const input = { 'oldname': [ {"name": "cat", "category": "animal"} ,{"name": "dog", "category": "animal"} ,{"name": "pig", "category": "animal"} ], 'oldname1': [ {"name": "pikachu", "category": "pokemon"} ,{"name": "Arbok", "category": "pokemon"} ,{"name": "Eevee", "category": "pokemon"} ] }, mapping = {'oldname':'newname','oldname1':'newname1','oldname2':'newname2','oldnamen':'newnamen'}, output = Object.fromEntries( Object.entries(mapping).map(([oldname,newname]) => [newname, input[oldname]]) .filter(([,value]) => value) ); console.log( input );Puede usar Object.entries y Object.fromEntries para hacer eso
const replaceKeys = (data, mapping) => Object.fromEntries( Object.entries(data).map(([k, v]) => [mapping[k] || k, v]) ) const data1 = { oldName1: 1, oldName2: 2, anotherKey: 3 } const mapping = { oldName1: 'newName1', oldName2: 'newName2' } console.log(replaceKeys(data1, mapping))