美文网首页
js递归循环

js递归循环

作者: 都江堰古巨基 | 来源:发表于2020-01-15 18:42 被阅读0次

以前一直以为递归循环不能改变被递归的数据本身,但今天无意间试了试,发现可以改变数据本身,究其原因递归本身是一种指针的传递,指针指向的值改变了就会改变本身的值。
话不多说,上例子:
先是JS的例子:

// 数据如下:
var data = [{
     name: "所有物品",
     children: [
         {
             name: "水果",
             children: [{name: "苹果", children: [{name: '青苹果'}, {name: '红苹果'}]}]
         },
         {
             name: '主食',
             children: [
                 {name: "米饭", children: [{name: '北方米饭'}, {name: '南方米饭'}]}
             ]
         },
         {
             name: '生活用品',
             children: [
                 {name: "电脑类", children: [{name: '联想电脑'}, {name: '苹果电脑'}]},
                 {name: "工具类", children: [{name: "锄头"}, {name: "锤子"}]},
                 {name: "生活用品", children: [{name: "洗发水"}, {name: "沐浴露"}]}
             ]
         }
      ]
}]

// 通过下面的程序改变它:
const change = function(list){
    list.forEach(function(row){
        if(row.children){
            getStr(row.children)
        }else {
            console.log(row.name)
            row.name = "我要被改变了!!!"
        }
    })
}

// 运行后的data:
[
    {
        "name": "所有物品",
        "children": [
            {
                "name": "水果",
                "children": [
                    {
                        "name": "苹果",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            },
            {
                "name": "主食",
                "children": [
                    {
                        "name": "米饭",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            },
            {
                "name": "生活用品",
                "children": [
                    {
                        "name": "电脑类",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    },
                    {
                        "name": "工具类",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    },
                    {
                        "name": "生活用品",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

dart 的demo:

main() {
  var data = [
    {
        "name": "所有物品",
        "children": [
            {
                "name": "水果",
                "children": [
                    {
                        "name": "苹果",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            },
            {
                "name": "主食",
                "children": [
                    {
                        "name": "米饭",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            },
            {
                "name": "生活用品",
                "children": [
                    {
                        "name": "电脑类",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    },
                    {
                        "name": "工具类",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    },
                    {
                        "name": "生活用品",
                        "children": [
                            {
                                "name": "我要被改变了!!!"
                            },
                            {
                                "name": "我要被改变了!!!"
                            }
                        ]
                    }
                ]
            }
        ]
    }
  ];
  change(data);
  print(data);
}

void change(List listData) {
  listData.forEach((e) {
    if (e["children"] != null)
      change(e["children"]);
    else
      e["name"] = "这是Dart的demo";
  });
}

//  输出:
[{name: 所有物品, children: [{name: 水果, children: [{name: 苹果, children: [{name: 这是Dart的demo}, {name: 这是Dart的demo}]}]}, {name: 主食, children: [{name: 米饭, children: [{name: 这是Dart的demo}, {name: 这是Dart的demo}]}]}, {name: 生活用品, children: [{name: 电脑类, children: [{name: 这是Dart的demo}, {name: 这是Dart的demo}]}, {name: 工具类, children: [{name: 这是Dart的demo}, {name: 这是Dart的demo}]}, {name: 生活用品, children: [{name: 这是Dart的demo}, {name: 这是Dart的demo}]}]}]}]

相关文章

  • js递归循环

    以前一直以为递归循环不能改变被递归的数据本身,但今天无意间试了试,发现可以改变数据本身,究其原因递归本身是一种指针...

  • JS数组递归循环

  • js递归循环数组

    从后台获取回来的数据是一个数组时,而且每个元素是一个对象,对象的层级不确定,就需要使用递归循环遍历所有子元素

  • 领扣算法12:整数转换为罗马数字

    题目描述: 递归实现: 循环实现: 递归与循环的比较:

  • 递归与循环

    理论上,任何循环都可以重写为递归形式。有些语言没有循环语句,只能使用递归。 循环改递归 改为递归的关键是发现逻辑“...

  • 递归与循环

    一.递归与循环 递归,说白了就是自己调用自己。理论上,任何的循环都可以重写为递归形式,所有的递归也可以被表述成循环...

  • 递归

    递归不用循环,调用自身循环,上诉代码为递归,它的普通形式如下:

  • 单链表翻转

    循环 递归

  • 【二叉树】二叉搜索树的第k个节点

    循环 递归

  • 斐波那契数列

    循环 递归

网友评论

      本文标题:js递归循环

      本文链接:https://www.haomeiwen.com/subject/tpfkgctx.html