zoukankan      html  css  js  c++  java
  • JavaScript 一维数组转二维数组

    问题描述:

    有如下结构的一维数组:

    const list = [
        {grade: '小学', city: '北京', count: 18},
        {grade: '小学', city: '上海', count: 12},
        {grade: '小学', city: '杭州', count: 19},
        {grade: '小学', city: '深圳', count: 10},
        {grade: '初中', city: '北京', count: 18},
        {grade: '初中', city: '上海', count: 12},
        {grade: '初中', city: '杭州', count: 19},
        {grade: '初中', city: '深圳', count: 10},
        {grade: '高中', city: '北京', count: 18},
        {grade: '高中', city: '上海', count: 12},
        {grade: '高中', city: '杭州', count: 19},
        {grade: '高中', city: '深圳', count: 10},
        {grade: '大学', city: '北京', count: 18},
        {grade: '大学', city: '上海', count: 12},
        {grade: '大学', city: '杭州', count: 19},
        {grade: '大学', city: '深圳', count: 10},
    ]

    需要处理为二维数组,其中第一维是 grade,第二维是 city:

    cosnt res = [
      {
        name: "小学", value:
        [
          {name: "北京", value: 18}
          {name: "上海", value: 12}
          {name: "杭州", value: 19}
          {name: "深圳", value: 10}
        ]
      }
      {
        name: "初中", value: value:
        [
          {name: "北京", value: 18}
          {name: "上海", value: 12}
          {name: "杭州", value: 19}
          {name: "深圳", value: 10}
        ]
      }
      {
        name: "高中", value: 
        [
          {name: "北京", value: 18}
          {name: "上海", value: 12}
          {name: "杭州", value: 19}
          {name: "深圳", value: 10}
        ]
      }
      {
        name: "大学", value: 
        [
          {name: "北京", value: 18}
          {name: "上海", value: 12}
          {name: "杭州", value: 19}
          {name: "深圳", value: 10}
        ]
      }
    ]

    解决方案:

    /**
     * 将一维数组处理为二维数组
     * @param {Array} list 需要处理的一维数组
     * @param {Object} extra 包含 nameKey 和 valueKey
     * @param {Array} nameKey 长度为二的数组,依序为 name 取值
     * @param {String} valueKey value 取值的键
     * @returns 
     */
    function convertOneDimArray(list, extra) {
      const { nameKey, valueKey } = extra || {};
    
      if (!nameKey || nameKey.length < 2 || !Array.isArray(list)) {
        return null;
      }
    
      const [name1, name2] = nameKey;
      const xMap = new Map();
    
      list.forEach((item) => {
        const x = item[name1];
        const y = {
          name: item[name2],
          value: item[valueKey],
        }
        const xValue = xMap.get(x);
        if (!xValue) {
          xMap.set(x, {
            name: x,
            value: [y],
          });
        } else {
          xValue.value.push(y)
        }
      });
    
      return [...xMap.values()];
    }

  • 相关阅读:
    解决首次访问jenkins,输入初始化默认密码之后,一直卡住问题,无法进行jenkins工具安装
    tomcat下安装jenkins
    主机无法访问虚拟机Linux的apache
    Centos 6.5 yum 安装Apache软件
    Linux如何用yum安装软件或服务
    linux yum安装httpd后,启动service httpd start 报错解决方案
    Thrift白皮书阅读笔记
    利用thrift在c++、java和python之间相互调用
    [原]Windows下openssl的下载安装和使用
    Windows 下openssl安装与配置
  • 原文地址:https://www.cnblogs.com/wisewrong/p/14959528.html
Copyright © 2011-2022 走看看