想要使用 JavaScript 在每个嵌套对象中添加新的键值

Want to add new key value in each nested object with JavaScript

提问人:Sanjay 提问时间:4/7/2023 更新时间:4/7/2023 访问量:133

问:

我有一个嵌套的 JavaScript 对象,我想在每个嵌套对象中添加新的键值。所以基本上我必须创建自定义函数来添加它。

**我的输入对象: **

const obj = {
    name: {
        final: {
            val: 'yes'
        }
    }
}

**预期对象: **

const outObj = {
    id: 1,
    name: {
        id: 1,
        final: {
            id: 1,
            val: 'yes'
        }
    }
}
JavaScript 对象 嵌套

评论

1赞 David 4/7/2023
你尝试了什么,什么没有按预期工作?如果嵌套级别未知,那么您可能需要编写一个递归函数,该函数遍历对象属性并递归到任何属性中,这些属性本身也是对象。
0赞 Sanjay 4/7/2023
嗨,是的,我尝试过递归概念,但在不同的测试用例中没有成功。

答:

0赞 protob 4/7/2023 #1

你可以递归函数和reduce来得到输出:

const obj = {
  name: {
    final: {
      val: 'yes'
    }
  }
};
const addId = (obj, id = 1) => Object.entries(obj).reduce((acc, [key, val]) => {
    acc.id = id;
    acc[key] = (typeof val === 'object' && val !== null) ? addId(val, id ) : val;
    return acc;
}, {});



const outObj = addId(obj);

console.log(outObj)

0赞 epascarello 4/7/2023 #2

解决方案是基本递归。你弄清楚对象的任何属性是否是一个对象,然后你遍历该对象,依此类推。

const obj = {
  name: {
    final: {
      val: 'yes'
    }
  }
}

const obj2 = {
  name: {
    final: {
      val: 'yes',
      age: 22,
      address: {
        city: 'Noida',
        age: 23
      }
    },
    age: 18
  },
  age: 20
}


const addKey = (obj, key, value) => {
  Object.values(obj).forEach(val => {
    if (val && typeof val === 'object') addKey(val, key, value);
  });
  obj[key] = value;
}

addKey(obj, 'id', 1);
addKey(obj2, 'id', 2);

console.log(obj);
console.log(obj2);

评论

0赞 Sanjay 4/7/2023
嗨,感谢您的回答!它有效,但使用不同的测试用例它不起作用。const obj = { name: { final: { val: 'yes', age: 22, address: { city: 'Noida', age: 23 } }, age: 18 }, age: 20 } 你能检查一下这个吗?
0赞 epascarello 4/7/2023
那个物体对我来说看起来不错。