这基本上是一个逻辑问题,应该适用于任何编程语言,我只是碰巧使用 JavaScript 来实现这一点
基本上想象我有某种类似的物体
{Props:"stuff",
other: {
stuff: "etc",
other: {
Extra: "filler",
other: {}
}
}
}
本质上,这是一个具有一些未知数量的额外属性的对象,但是每个子对象都有一个同名的嵌套属性“在本例中为“其他”),并且深度可能是无限的,这意味着可能有根对象内有 n 个对象,每个子对象都是另一个 key 相同的对象中的容器(在本例中也是“其他”)
听起来可能比实际情况更复杂,但基本上 other 属性是在根对象中嵌套和重复的
问题是我想创建一个函数来在给定的深度量(n)处打破这个嵌套链,从而将所有进一步的嵌套对象设置为一个值
这可能听起来很复杂,但基本上,在上面的示例中,对象的“其他”属性的嵌套深度为 3,假设我想在深度索引 2 处打破深度,从而将对象更改为仅有一个嵌套的“其他”属性,设置为某个值(例如数字或字符串,例如“5”),而不是设置为也包含其他属性(以及可能的其他属性等)的另一个对象
那么我怎样才能创建一个函数,它接受一个基对象,包含未知数量的嵌套属性 Ruth key k
,并使其返回一个新对象(或修改原始对象,但是我更愿意只返回一个与基础对象几乎相同的新对象,除了在深度索引 n
处,带有键 k
的嵌套属性将被设置为 value v
,而不是继续在其未知的附加嵌套深度量的链中
我什至无法理解如何做到这一点,我总是只是返回设置索引 k
等于根函数的属性,但将属性本身作为参数传递以代替原始根对象(基本上是递归),除非输入对象不包含属性k
,在这种情况下仅返回属性本身,但这只是一个返回最内层嵌套属性的递归方法,但不知道如何实现上述结果,这又是一个与基本对象 Ruth 几乎相同的新对象,除了它的嵌套属性在深度处带有键 k
之外n
被设置为值 v
,我完全不知道从哪里开始
最佳答案
我们可以像这样使用递归函数
let obj = {Props:"stuff",
other: {
stuff: "etc",
other: {
Extra: "filler",
other: {
stuff: "abc",
other:{
stuff: "acbh",
other: {}
}
}
}
}
};
function normalizeObjectDepth(obj, level, curr_level, key){
if(curr_level==level-1){
obj.other = key;
return;
}
normalizeObjectDepth(obj.other, level, curr_level+1, key);
}
normalizeObjectDepth(obj, 3, 0, 5);
console.log(obj);
关于javascript - 修改对象中的第n个嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63900191/