#javascript
Вопрос:
Я создал эту функцию:
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))
Идея этой функции состоит в том, чтобы изменить значение объекта на новое, и она должна выполняться рекурсивно.
Я ожидаю такого результата:
const obj = {
name: null',
age: '687',
demo: {
test: null'
}
}
Но я не получаю этого результата, и test
он все еще остается неизменным.
Вопрос: Как исправить и в чем проблема?
Комментарии:
1. Ваш рекурсивный вызов to
demoD
ничего не делает с возвращаемым значением.2. Как изменить функцию?
3. измените рекурсивный вызов на
return demoD(obj[key], toChange, newV);
Ответ №1:
Если вы хотите применить изменения к исходному объекту на месте:
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
}
Если вы не хотите изменять свой исходный объект, то он должен быть:
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
}, {})
}