javascript - 在 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
仍然没有改变。
问题:如何解决,问题是什么?
解决方案
如果要对原对象应用更改:
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
}, {})
}
推荐阅读
- c# - 如何在 C# 中使它成为递归语句?
- azure-devops - 适用于 Azure DevOps 服务器的 Visual Studio 2019“没有可用的存储库”
- android - 是否可以让安卓手机在 Linux 上显示为 USB 视频设备?
- python - 如何使用枚举值实现类属性
- r - 将列表合并在一起,并根据其中一个列表中包含的信息创建一个新列
- javascript - 在 JS 中映射对象
- javascript - 即使使用发射,Vue内联模板也不会触发方法
- javascript - Javascript 将 vw 转换为 vh
- hadoop - 在 Hadoop 3.1.0 中,namenode 工作但 datanode 不工作
- mongodb - Mongodb - db.shutdownserver() 不工作。授权错误