当前位置: 首页 > article >正文

前端 js 处理一个数组 展示成层级下拉样式

好记性不如赖笔头;
前端开发中,不管是什么时候都会遇到select 下拉框的使用,一般情况下,数据处理后端都会处理好。前端一般使用相应技术栈所推荐的公共组件就可以了。
但是一般也有后端不处理的数组,需要前端自己处理成 层级下拉样式的,如下图(来自官网图片):
前端处理的前提是要确定那个是父级元素,那个是子级元素,这样才能更好的处理数据。

在这里插入图片描述
这个时候前端要写个方法去处理这个数组了。
这个数组后端是会给的。
举个例子

let arr = [
    { parenCode: '1',
      parenName: '1',
      childrenCode: '1-1',
      childrenName: '1-1'
    },
    { parenCode: '1',
      parenName: '1',
      childrenCode: '1-2',
      childrenName: '1-2'
    },
    { parenCode: '1',
      parenName: '1',
      childrenCode: '1-3',
      childrenName: '1-3'
    },
    { parenCode: '2',
      parenName: '2',
      childrenCode: '2-1',
      childrenName: '2-1'
    },
    { parenCode: '3',
      parenName: '3',
      childrenCode: '3-1',
      childrenName: '3-1'
    },
    { parenCode: '3',
      parenName: '3',
      childrenCode: '3-2',
      childrenName: '3-2'
    }
  ]; 
	
// 方法处理
 function transformData(data) {
    const result = [];
    // 使用Map来按parenCode分组
    const map = new Map();
    data.forEach((item) => {
      if (!map.has(item.parenCode)) {
        // 如果Map中还没有这个 parenCode,则创建一个新的对象,并添加到result中
        map.set(item.parenCode, {
          label: item.parenName,
          value: item.parenCode,
          children: [],
        });
        result.push(map.get(item.parenCode));
      }
      // 将 childrenCode和 childrenName添加到对应parenCode的children数组中
      map.get(item.parenCode).children.push({
        label: item.childrenName,
        value: item.childrenCode,
      });
    });
    // 过滤掉父级为空的数据
    return result.filter((item) => item.value !== null);
  }; 
  
  // 方法调用
  const Data = transformData(arr); 
  console.log(Data)
 
 如下图结果,我们就可以使用 return 的数据 进行传值展示了。

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/news/362158.html

相关文章:

  • scrapy的xpath在控制台可以匹配,但是到了代码无法匹配(无法匹配tbody标签)
  • Java应用程序的测试覆盖率之设计与实现(二)-- jacoco agent
  • Tailwind Starter Kit 一款极简的前端快速启动模板
  • 深入解析JavaScript中的箭头函数及其在React中的应用(箭头函数与传统函数的区别、如何在不同上下文中使用箭头函数)
  • 1 -《本地部署开源大模型》如何选择合适的硬件配置
  • 天线有源数据和无源数据有什么区别
  • 理解和解决TCP 网络编程中的粘包与拆包问题
  • 【C++】创建TCP服务端
  • DLNA—— 开启智能生活多媒体共享新时代
  • 线性可分支持向量机的原理推导 9-23拉格朗日乘子α的最大化问题 公式解析
  • Spring中导致事务传播失效的情况(自调用、方法访问权限、异常处理不当、传播类型选择错误等。在实际开发中,务必确保事务方法正确配置)
  • 回溯法求解简单组合优化问题
  • 初学者怎么入门大语言模型(LLM)?
  • 微积分复习笔记 Calculus Volume 1 - 3.5 Derivatives of Trigonometric Functions
  • 11.学生成绩管理系统(Java项目基于SpringBoot + Vue)
  • rk3568 , rk3588, rtl8211F , 时钟的问题
  • MySQL--mysql的安装
  • 什么是CI/CD
  • 主机本地IP与公网IP以及虚拟机的适配器和WSL发行版的IP
  • 分布式异步任务框架Celery,如何实现代码实时监控
  • 聊聊黑龙江等保测评
  • 人大金仓链接
  • rancher安装并快速部署k8s 管理集群工具
  • C/S 软件架构
  • D39【python 接口自动化学习】- python基础之函数
  • 线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)