资讯专栏INFORMATION COLUMN

复杂表格设计数据格式

fancyLuo / 1904人阅读

摘要:表头设计原理和多叉树的原理类似,参考了它的展示形式。大家一起交流成长。

1. 表头设计

原理:
和多叉树的原理类似,参考了它的展示形式。

表头说明:
如果没有孩子节点就只返回如下一个字段:

name :名字

如果有孩子节点,就把数据加在children里面,层层嵌套,返回字段如下:

name :名字

children : 孩子节点

数据结构格式,参考如下代码:

headerData:[
            {
                name: "地区",
            },
            {
                name: "总数据",
                children: [
                    {
                        name: "数据1",
                        children: [
                            {
                                name: "数据11",
                                children: [
                                    {
                                        name: "数据111",
                                    },
                                    {
                                        name: "数据112",
                                    }
                                ]
                            },
                            {
                                name: "数据12",
                                children: [
                                    {
                                        name: "数据121",
                                    },
                                    {
                                        name: "数据122",
                                    }
                                ]
                            },
                            {
                                name: "数据13",
                                children: [
                                    {
                                        name: "数据131",
                                    },
                                    {
                                        name: "数据132",
                                    }
                                ]
                            },
                            {
                                name: "数据14",
                            },

                        ]
                    }
                ]
            }
        ];

表头的宽高方面,前端计算,后端不用管,按照如下格式返回数据即可。

2. 表格数据格式

每一项按照表头展示的顺序返回,通过数组的形式
返回一个参数:

bodyData:总数据

数据结构格式参考代码如下:

bodyData:[
        ["地区最先","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"],
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"], 
        ["地区","数据111","数据112","数据121","数据122","数据131","数据132","数据14"], 
        ["地区最后","数据111","数据112","数据121","数据122","数据131","数据132","数据14"], 
    ]
3. 效果

如上表头与表格数据代码生成的效果如图:

4. 代码

语法高亮用到 codemirror 插件

/**
 * 递归遍历 格式化数组
 * @param { Array } paramArr 目标数组
 * @param { Number } level 层级
 */
export function formatArray(paramArr, level) {
  let levelFirst = Number(level)
  const arr = []
  let childArr = []
  for (let i = 0; i < paramArr.length; i++) {
      let obj = {}
      for (let j in paramArr[i]) {
          if (j != "children") {
              obj[j] = paramArr[i][j]
          }
          obj["level"] = levelFirst
          obj["width"] = getLeafCountTree(paramArr[i])
          if (!paramArr[i].children) {
              obj["childrenNumber"] = 0
              // LeafNode: 叶子节点就是树中最底段的节点
              // obj["isLeafNode"] = true
          } else {
              // obj["isLeafNode"] = false
              obj["childrenNumber"] = paramArr[i].children.length
          }
      }
      arr.push(obj)
      if (paramArr[i].children) {
          let lev = Number(levelFirst) + 1
          childArr = childArr.concat(formatArray(paramArr[i].children, lev));
      }
  }
  let endArr = arr.concat(childArr)
  return endArr
}
/**
 * 获取 节点的所有叶子节点个数
 * @param {Object} json Object对象
 */
export function getLeafCountTree(json) {
  if(!json.children){
      return 1;
  }else{
      var leafCount = 0;
      for(var i = 0 ; i < json.children.length ; i++){
          leafCount = leafCount + getLeafCountTree(json.children[i]);
      }
      return leafCount;
  }
}
// json对对象字符串的格式化,美化
export function  jsonFromat (text_value){
    if(text_value == ""){
       alert("不能为空");  
       return false;
    } else {
          var json=eval("(" + text_value + ")");
          text_value=JSON.stringify(json);
          var res="";
          for(var i=0,j=0,k=0,ii,ele;i




5. 效果链接:

效果链接如下:

复杂表格设计数据格式

动态效果:

最后

对 全栈开发 有兴趣的朋友可以扫下方二维码关注我的公众号 —— 爱写bugger的阿拉斯加

分享 web 开发相关的技术文章,热点资源,全栈程序员的成长之路。

大家一起交流成长。

只要关注公众号并回复 福利 便送你六套视频资源: Python、Java、Linux、Go、vue、react、javaScript

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96361.html

相关文章

  • 从零开始的 React 组件开发之路 (一):表格

    摘要:下的表格狂想曲前言欢迎大家阅读从零开始的组件开发之路系列第一篇,表格篇。北京小李中的每一个元素是一列的配置,也是一个对象,至少应该包括如下几部分表头该列使用行中的哪个进行显示易用性与通用性的平衡易用性与通用性互相制衡,但并不是绝对矛盾。 React 下的表格狂想曲 0. 前言 欢迎大家阅读「从零开始的 React 组件开发之路」系列第一篇,表格篇。本系列的特色是从 需求分析、API 设...

    DesGemini 评论0 收藏0
  • 第6章:可维护性软件构建方法 6.3可维护性构建技术

    摘要:遵循特定规则,利用操作符,终止节点和其他非终止节点,构造新的字符串非终结符是表示字符串的树的内部节点。语法中的生产具有这种形式非终结符终结,非终结符和运算符的表达式语法的非终结点之一被指定为根。 大纲 基于状态的构建 基于自动机的编程 设计模式:Memento提供了将对象恢复到之前状态的功能(撤消)。 设计模式:状态允许对象在其内部状态改变时改变其行为。 表驱动结构* 基于语法的构...

    young.li 评论0 收藏0
  • mysql数据库引擎详解

    摘要:是的扩展格式和缺省的数据库引擎。数据库引擎都是造就灵活性的技术的直接产品,这项技术就是。估计这个插件式数据库引擎的模型甚至能够被用来为创建本地的提供器。能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是。 数据库引擎介绍MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、M...

    孙吉亮 评论0 收藏0

发表评论

0条评论

fancyLuo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<