首页 > 解决方案 > 在 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仍然没有改变。
问题:如何解决,问题是什么?

标签: 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
  }, 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
  }, {})
}

推荐阅读