多层数组对象添加属性值

本文介绍如何在具有嵌套结构的多层数组对象中动态添加属性值。通过递归方法,可以遍历任意深度的数组,并在找到合适的位置插入新的属性,这对于处理复杂数据结构尤其有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <div class="container">
    <el-cascader
      v-model="value"
      :options="optionData"
      :show-all-levels="false"
      placeholder="正在选择数据中"
      @change="handleDeptName"
    ></el-cascader>
  </div>
</template>
<script>
export default {
  data() {
    return {
      optionData: [],
      value: [],
      vals: []
    };
  },
  created() {},
  mounted() {
    const data = [
      {
        date: "2016-05-02",
        id: "1",
        name: "第一层数据1",
        address: "1518",
        children: [
          {
            date: "2016-05-02",
            id: "11",
            name: "第二层数据11",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "111",
                name: "第三层数据111",
                address: "1518",
                children: [
                  {
                    date: "2016-05-02",
                    id: "1111",
                    name: "第四层数据1111",
                    address: "1518"
                  },
                  {
                    date: "2016-05-02",
                    id: "1111",
                    name: "第四层数据1112",
                    address: "1518"
                  }
                ]
              },
              {
                date: "2016-05-02",
                id: "112",
                name: "第三层数据112",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "113",
                name: "第三层数据113",
                address: "1518"
              }
            ]
          },
          {
            date: "2016-05-02",
            id: "12",
            name: "第二层数据12",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "121",
                name: "第三层数据121",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "122",
                name: "第三层数据122",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "123",
                name: "第三层数据123",
                address: "1518"
              }
            ]
          },
          {
            date: "2016-05-02",
            id: "13",
            name: "第二层数据13",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "131",
                name: "第三层数据131",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "132",
                name: "第三层数据132",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "133",
                name: "第三层数据133",
                address: "1518"
              }
            ]
          }
        ]
      },
      {
        date: "2016-05-04",
        id: "2",
        name: "第一层数据2",
        address: "1517",
        children: [
          {
            date: "2016-05-02",
            id: "21",
            name: "第二层数据21",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "211",
                name: "第三层数据211",
                address: "1518"
              },
              {
                date: "2016-05-02",
                name: "第三层数据212",
                id: "212",
                address: "1518"
              },
              {
                date: "2016-05-02",
                name: "第三层数据213",
                id: "213",
                address: "1518"
              }
            ]
          },
          {
            date: "2016-05-02",
            id: "22",
            name: "第二层数据22",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "221",
                name: "第三层数据221",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "222",
                name: "第三层数据222",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "223",
                name: "第三层数据223",
                address: "1518"
              }
            ]
          },
          {
            date: "2016-05-02",
            id: "23",
            name: "第二层数据23",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "231",
                name: "第三层数据231",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "232",
                name: "第三层数据232",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "233",
                name: "第三层数据233",
                address: "1518"
              }
            ]
          }
        ]
      },
      {
        date: "2016-05-01",
        id: "3",
        name: "第一层数据3",
        address: "1519",
        children: [
          {
            date: "2016-05-02",
            id: "31",
            name: "第二层数据31",
            address: "1518"
          },
          {
            date: "2016-05-02",
            id: "32",
            name: "第二层数据32",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "321",
                name: "第三层数据321",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "322",
                name: "第三层数据322",
                address: "1518"
              },
              {
                date: "2016-05-02",
                id: "323",
                name: "第三层数据323",
                address: "1518"
              }
            ]
          },
          {
            date: "2016-05-02",
            id: "33",
            name: "第二层数据33",
            address: "1518",
            children: [
              {
                date: "2016-05-02",
                id: "331",
                name: "第三层数据331",
                address: "1518",
                children: [
                  {
                    date: "2016-05-02",
                    id: "3331",
                    name: "第三层数据3331",
                    address: "1518"
                  },
                  {
                    date: "2016-05-02",
                    id: "3332",
                    name: "第三层数据3332",
                    address: "1518"
                  },
                  {
                    date: "2016-05-02",
                    id: "3333",
                    name: "第三层数据3333",
                    address: "1518"
                  }
                ]
              },
              {
                date: "2016-05-02",
                id: "332",
                name: "第三层数据332",
                address: "1518"
              },
              {
                date: "2016-05-02",

                id: "333",
                name: "第三层数据333",
                address: "1518"
              }
            ]
          }
        ]
      }
    ];
    this.init(data)},
  methods: {
  //初始化数据
    init(data) {
      const newData = data.map(item => {
        return this.addValue(item);
      });
      this.optionData = newData;
    },
    //获取选中的数据
    handleDeptName() {
      this.vals = this.getCascaderObj(this.value, this.optionData);
      console.log(this.vals[this.vals.length - 1].id);
      console.log(this.vals[this.vals.length - 1].label);
    },
    getCascaderObj(val, opt) {
      return val.map(function(value, index, array) {
        for (var itm of opt) {
          if (itm.value == value) {
            opt = itm.children;
            return itm;
          }
        }
        return null;
      });
    },
    //给初始化数据添加 label  和 value 属性
    //若有更好的方法,还请兄台告知
    addValue(item) {
      return {
        value: item.name,
        label: item.name,
        id: item.id,
        children: item.children
          ? item.children.map(itemes => {
              return this.addValue(itemes);
            })
          : ""
      };
    }
  }
};
</script>
<style lang="scss" scoped>
.container {
  max-width: 600px;
  margin: 0 auto;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值