Javascript 查找对象中出现的所有关键点并更改值
我想找到所有发生的键并更改其值。我希望将整个对象中的id和名称更改为新值Javascript 查找对象中出现的所有关键点并更改值,javascript,Javascript,我想找到所有发生的键并更改其值。我希望将整个对象中的id和名称更改为新值 const myObj = { id: 1, name: "a", children: [ { id: 2, name: "b", children: [ { id: 3, name: "c", } ] },
const myObj = {
id: 1,
name: "a",
children: [
{
id: 2,
name: "b",
children: [
{
id: 3,
name: "c",
}
]
},
{
id: 4,
name: "d",
children: [
{
id: 5,
name: "e",
children: [
{
id: 6,
name: "f",
children: [
{
id: 7,
name: "g",
}
]
}
]
}
]
},
]
}
我试过的代码,不确定如何获得两个属性并更改它们的值
function findAllByKey(obj, id, name) {
let constObj = Object.entries(obj);
console.log(obj)
Object.entries(constObj)
.reduce(([key, value]) => (key === id)
? obj[key] = "123"
: (typeof value === 'object'))
return obj;
}
// USAGE,
console.log(findAllByKey(myObj, 'id', 'name'))
您需要为此使用递归 Dave Newton给出了一个很好的论据,他说
子属性
包含了您想要更改的大多数属性,因此我建议您循环检查每个子属性
并以这种方式更改它们的ID。然而,我给你的答案将适用于更一般的情况(对于那些可能需要不同方法的人)
函数findAllByKeyAndReplace(对象、键、替换){
常量活套=功能(obj){
for(让k在obj中){
如果(k==键){
obj[k]=替换;
}
else if(“对象”==对象的类型[k]){
活套(obj[k]);
}
}
}
活套(对象);
}
常数myObj={
id:1,
名称:“a”,
儿童:[
{
id:2,
名称:“b”,
儿童:[
{
id:3,
名称:“c”,
}
]
},
{
id:4,
名称:“d”,
儿童:[
{
id:5,
名称:“e”,
儿童:[
{
id:6,
名称:“f”,
儿童:[
{
id:7,
名称:“g”,
}
]
}
]
}
]
},
]
}
Findalllbykeyanderplace(myObj,“id”,“123”);
Findalllbykeyanderplace(myObj,“名称”、“腌菜”);
console.log(myObj)代码>这些是嵌套的,对吗?很可能您需要利用递归。它们是嵌套的。。。是的。为了澄清一下,您想更改所有名为“id”的属性及其值吗?不仅仅是嵌套在“children”中的那些?您不想对children
中的每个项调用相同的方法吗?这看起来像是一个标准的递归过程。@Reality:是的,所有发生的id和名称都要更改..我试着使用reduce和recursion,但似乎有些地方出了问题。我在Object.entries等方面没有那么先进,但为什么要使用reduce
?你不能使用.forEach
?@Reality任何可以用递归解决的问题都可以用迭代解决。因此,OP不需要使用递归。在某些情况下,迭代将被优先用于最小化调用堆栈的深度。裁判:@MattMorgan-Huh,我得找个时间调查一下。不过,我在高级逻辑方面做得不好,我必须在这方面做一些改进。然而,对于我们这些缺乏高级(或更高)逻辑和数学知识的人来说,递归目前还不错。