递归判断多维数组中对象是否有值

一个项目需求中,需要判断数组中的对象是否有值,先看下数据结构:

data(){
  return {
      
    list = [
              {
                    value: "1",
                    children: [
                        {
                            value: "2"
                        },
                        {
                            value: "3",
                            children: [
                                {
                                    value: "4"
                                }
                            ]
                        }
                    ]
                },
                {
                    value: "5",
                    children: [
                        {
                            value: "6",
                            children: [
                                {
                                    value: "7"
                                }
                            ]
                        }
                    ]
                }
            ];

    }
}

  那么如何进行判断多层子集是否有值呢?这里就会用到递归来实现   

若使用vue搭建的工程项目

  我们可以现在methods中封装一个递归的方法

//递归判断项目中存在对象
        ruleValidate(data) {
            let flag = true;
            function judgeChildren(data) {
                data.forEach(e => {
                    if (!flag) {
                        return;
                    }
                    if (e.value) {
                        e.prop = e.value;   //给对象增加自定义的key , 很多情况下都会使用到自定义的key
                        e.lable = e.value;
                    }
                    if (!e.value) {
                        flag = false;
                        return;
                    } else if (e.children && e.children.length) {
                        e.children.prop= e.value;  //给对象增加自定义的key,很多情况下都会使用到自定义的key
                        e.children.lable = e.value;
                        judgeChildren(e.children);
                    }
                });
            }
            judgeChildren(data);
            return data;
        },

  在created这个声明周期中,直接对数据进行处理

 this.dataObj = this.ruleValidate(this.list);
 console.log(this.dataObj);

  打印就可以看到  每个自定义的key值了,想要什么类型的数据,直接在封装的方法进行修改就ok了

posted @ 2019-07-29 16:06  我是一名好程序员  阅读(745)  评论(0编辑  收藏  举报