new Map()+Array.from()整理elementPlus的级联器数据

1、假设有数据:

javascript 复制代码
// 规则类型
const eventTypeStatus = [
    { label: '数据规则', parentId: null, value: 'data' },
    { label: '事件规则', parentId: null, value: 'event' },
]

// 规则来源
const eventSourceStatus = [
    { label: '数据-1', parentId: 'data', value: 'data-001' },
    { label: '数据-2', parentId: 'data', value: 'data-002' },
    { label: '数据-3', parentId: 'data', value: 'data-003' },
    { label: '事件-1', parentId: 'event', value: 'event-001' },
    { label: '事件-2', parentId: 'event', value: 'event-002' },
    { label: '事件-3', parentId: 'event', value: 'event-003' },
]

2、Cascader 级联选择器的数据格式:

3、把1中的 eventTypeStatus 和 eventSourceStatus 数据整理成级联器需要的options数据格式

1、定义方法 buildCascaderOptions

javascript 复制代码
// 将 eventTypeStatus 和 eventSourceStatus 整理为 cascader 所需的 options 结构
const buildCascaderOptions = (eventTypeStatus , eventSourceStatus) => {
  // 步骤1:将 eventTypeStatus 转换为 map,便于快速查找
  const parentMap = new Map();
  console.log('parentMap', parentMap);
  eventTypeStatus.forEach(item => {
    console.log('eventTypeStatus-item:', item);
    
    parentMap.set(item.value, {
      value: item.value,
      label: item.label,
      children: []
    });
    console.log('parentMap', parentMap);
    
  });

  // 步骤2:遍历 eventSourceStatus,将每个 child 添加到对应的 parent 的 children 中
  eventSourceStatus.forEach(child => {
    const parent = parentMap.get(child.parentCd);
    if (parent) {
      parent.children.push({
        value: child.value,
        label: child.label,
        parentCd: child.parentCd // 可选保留
      });
    } else {
      console.warn(`未找到父节点 ${child.parentCd},无法挂载子项:${child.label}`);
    }
  });

  // 步骤3:将 map 中的所有值转换为数组
  console.log('数组', Array.from(parentMap.values()));
  
  return Array.from(parentMap.values());
};

2、调用 buildCascaderOptions 生成 options

javascript 复制代码
onMounted(() => {
    // 规则类型
    const eventTypeStatus = [
        { label: '数据规则', parentId: null, value: 'data' },
        { label: '事件规则', parentId: null, value: 'event' },
    ]

    // 规则来源
    const eventSourceStatus = [
        { label: '数据-1', parentId: 'data', value: 'data-001' },
        { label: '数据-2', parentId: 'data', value: 'data-002' },
        { label: '数据-3', parentId: 'data', value: 'data-003' },
        { label: '事件-1', parentId: 'event', value: 'event-001' },
        { label: '事件-2', parentId: 'event', value: 'event-002' },
        { label: '事件-3', parentId: 'event', value: 'event-003' },
    ]

    options.value = buildCascaderOptions(eventTypeStatus , eventSourceStatus);
})

3、调用 options

html 复制代码
<el-col :span="7">
   <el-form-item label="事件来源" style="font-weight: 600;width: 100%">
      <el-cascader v-model="eventSourceCascader" :options="options" @change="handleChange"              />
   </el-form-item>
</el-col>
相关推荐
岁岁种桃花儿4 分钟前
Vue核心语法第一篇:Vue是什么?
前端·javascript·vue.js
Highcharts.js33 分钟前
数据可视化避坑指南 ——开发中常见图表错误与修复方案
javascript·信息可视化·数据可视化·highcharts·数据可视化避坑·修复方案
观无1 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雯宝1 小时前
3. 驱动框架(块设备)
linux
愚公搬代码1 小时前
【愚公系列】《Web应用安全》001-VMware的安装
前端·安全
xiaohaiAIgeo1 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
立少→万能汉编1 小时前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
weixin_431600441 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
静止了 所有的花开1 小时前
Ubuntu 26.04 静态 IP 配置不生效解决方法
linux·ubuntu·静态ip
你挚爱的强哥2 小时前
【chromeDownload】自定义组件:多用于登录框底部提供下载Chrome谷歌浏览器的链接
前端·vue.js·chrome