Javascript 嵌套 object 递归
Javascript nested object recursive
所以,我做了研究,但到目前为止我找不到任何好的解决方案...
所以我有一个 object 方法,所以我尝试了一个递归函数,但它根本不起作用
(我为什么在这里)
这个函数通过一层然后停止她发现 id 3 和 id 11 都有 1 个孩子,而我希望它更深入
我希望它不是重复的post
提前谢谢你
#函数
const haveChild = (obj, parent_id=0) =>{
for (const [key,value] of Object.entries(obj)){
if (value && typeof value === "object"){
if (value['childrens']){
for (const [k,v] of Object.entries(value.childrens)){
haveChild(v,v.parent_id)
console.log('-----',v.name,'parent id= ',v.parent_id)
}
}else{
}
}
}
#数据来自API
{
"2": {
"id": "2",
"parent_id": "0",
"name": "name1"
},
"3": {
"id": "3",
"parent_id": "0",
"name": "name2",
"childrens": {
"9": {
"id": "9",
"parent_id": "3",
"name": "name3"
}
}
},
"11":{
"id": "11",
"parent_id": "0",
"name": "name4",
"childrens": {
"16": {
"id": "16",
"parent_id": "11",
"name": "name5",
"childrens": {
"21": {
"id": "21",
"parent_id": "16",
"name": "name6",
"childrens": {
"23": {
"id": "23",
"parent_id": "21",
"name": "name7"
}
}
}
}
}
}
}
}
问题是第一次调用函数时,在for循环中,key
是每个对象的key,value
是对应的值
但是从第二次开始key
是属性名,value
是属性值
所以你必须以这种方式创建另一个对象:
{[k]: v}
我还将 console.log
移到内部 for 循环之外
const haveChild = (obj, parent_id=0) =>{
for (const [key,value] of Object.entries(obj)){
if (value && typeof value === "object"){
if (value.childrens){
for (const [k,v] of Object.entries(value.childrens)){
haveChild({[k]: v},v.parent_id)
}
}
console.log('-----',value.name,'parent id= ',value.parent_id);
}
}
}
所以,我做了研究,但到目前为止我找不到任何好的解决方案...
所以我有一个 object 方法,所以我尝试了一个递归函数,但它根本不起作用 (我为什么在这里)
这个函数通过一层然后停止她发现 id 3 和 id 11 都有 1 个孩子,而我希望它更深入
我希望它不是重复的post
提前谢谢你
#函数
const haveChild = (obj, parent_id=0) =>{
for (const [key,value] of Object.entries(obj)){
if (value && typeof value === "object"){
if (value['childrens']){
for (const [k,v] of Object.entries(value.childrens)){
haveChild(v,v.parent_id)
console.log('-----',v.name,'parent id= ',v.parent_id)
}
}else{
}
}
}
#数据来自API
{
"2": {
"id": "2",
"parent_id": "0",
"name": "name1"
},
"3": {
"id": "3",
"parent_id": "0",
"name": "name2",
"childrens": {
"9": {
"id": "9",
"parent_id": "3",
"name": "name3"
}
}
},
"11":{
"id": "11",
"parent_id": "0",
"name": "name4",
"childrens": {
"16": {
"id": "16",
"parent_id": "11",
"name": "name5",
"childrens": {
"21": {
"id": "21",
"parent_id": "16",
"name": "name6",
"childrens": {
"23": {
"id": "23",
"parent_id": "21",
"name": "name7"
}
}
}
}
}
}
}
}
问题是第一次调用函数时,在for循环中,key
是每个对象的key,value
是对应的值
但是从第二次开始key
是属性名,value
是属性值
所以你必须以这种方式创建另一个对象:
{[k]: v}
我还将 console.log
移到内部 for 循环之外
const haveChild = (obj, parent_id=0) =>{
for (const [key,value] of Object.entries(obj)){
if (value && typeof value === "object"){
if (value.childrens){
for (const [k,v] of Object.entries(value.childrens)){
haveChild({[k]: v},v.parent_id)
}
}
console.log('-----',value.name,'parent id= ',value.parent_id);
}
}
}