Creé esta función:
const demoD = ( obj, toChange, newV, ) => { return Object.keys(obj).reduce((acc, key) => { if (typeof obj[key] === 'object') { demoD(obj[key], toChange, newV); } acc[key] = obj[key] === toChange ? newV : obj[key] return acc }, {}) } const obj = { name: '', age: '687', demo: { test: '' } } console.log(demoD(obj, '', null)) La idea de esta función es cambiar un valor del objeto por uno nuevo, y debe ejecutarse recursivamente.
Espero este resultado:
const obj = { name: null', age: '687', demo: { test: null' } } Pero no obtengo este resultado, y la test sigue sin cambios.
Pregunta: ¿Cómo solucionarlo y cuál es el problema?
Si desea aplicar cambios al objeto original en su lugar:
const demoD = ( obj, toChange, newV, ) => { return Object.keys(obj).reduce((acc, key) => { if (typeof obj[key] === 'object') { demoD(obj[key], toChange, newV); } acc[key] = obj[key] === toChange ? newV : obj[key] return acc }, obj) // 👈 send in obj here }Si no desea mutar su objeto original, entonces debería ser:
const demoD = ( obj, toChange, newV, ) => { return Object.keys(obj).reduce((acc, key) => { if (typeof obj[key] === 'object') { acc[key] = demoD(obj[key], toChange, newV) } else { acc[key] = obj[key] === toChange ? newV : obj[key] } return acc }, {}) }