为了账号安全,请及时绑定邮箱和手机立即绑定

在 Reactjs 中递归构建数组

在 Reactjs 中递归构建数组

湖上湖 2021-11-12 17:39:42
我正在尝试从 React 中获取的数组创建一个 menuTree。我的问题是我不知道如何递归地构建我的数组:假设我获取了一个 mainUrl 并获取了数组:[ {"id":"EU","type":"l","text":"Europe"}, {"id":"AS","type":"l","text":"Asia"}]由于类型是“l”我需要做另一个获取:mainUrl/EU现在我得到:[ {"id":"SP","type":"l","text":"Spain"}, {"id":"FR","type":"l","text":"France"}]同样,这两种类型都是“l”,所以我再取一次:mainUrl/EU/SP现在我得到:[ {"id":"MA","type":"t","text":"Madrid"}]由于类型现在是“t”,我停下来重新开始,然后是法国,然后是亚洲。请记住,我不知道他们在阵列中的孩子的部门我的数组应该是这样的:[    {        "id": "EU",        "type": "l",        "text": "Europe",        "children": [            {                "id": "SP",                "type": "l",                "text": "Spain",                "children":[                    {                        "id": "MA",                        "type": "t",                        "text": "Madrid"                    }                ]            },            {                "id": "FR",                "type": "l",                "text": "France",                "children": [                    {                        "id": "PA",                        "type": "t",                        "text": "Paris"                    }                ]            }        ]    },    {        "id": "AS",        "type": "l",        "text": "Asia",        "children":[...]    }]
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

const mainUrl = "yourMainUrl"; 


const fetchDataTree = async url => {


  // I assume you will handle the fetch with your own method

  let countryArr = await yourFetchFunction(url);


  for (let key in countryArr) {

   if (countryArr[key].type === "l") {

     countryArr[key].children = await fetchDataTree(url + "/" + countryArr[key].id)

   }

 }


 return countryArr

}


const yourDataTree = await fetchDataTree(mainUrl);


查看完整回答
反对 回复 2021-11-12
?
呼如林

TA贡献1798条经验 获得超3个赞

const results = fetch("");

        function getChildren(name){

            const fetchData = fetch(name);

            fetchData.forEach(item => {

                if (item.type === "l") {

                    item.children = getChildren(item.id);

                }

            });

            return fetchData;

        }


        results.forEach(item => {

            if (item.type === "l") {

                item.children = getChildren(item.id);

            }

        });

和 fetch 是这样的:


function fetch(u) {

    switch (u){

        case "":

            return [

                {

                    id: "EU",

                    type: "l",

                    text: "Europe"

                },

                {

                    id: "AS",

                    type: "l",

                    text: "Asia"

                }

            ]

        case "EU":

            return [

                {

                    id:"SP",

                    type:"l",

                    text:"Spain"

                },

                {

                    id:"FR",

                    type:"l",

                    text:"France"

                }

            ];

        case "SP":

            return [

                {

                    id:"MA",

                    type:"t",

                    text:"Madrid"

                }

            ];

        default:

            return [];

    }

};


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信