数据接口返回的数据格式如下:

{

"errcode":"1",

"list":[

{

"stone_name":"KX008",

"customer_name":"KKF",

"customer_id":"306569681005711360",

"child":[

{

"gold_name":"18K白",

"child":[

{

"production_quantity":"0",

"quantity_shipped":"0",

"create_order_time":"2019-08-07",

"order_quantity":"1",

"order_num":"DD190806001",

"shipments_time":"",

"order_info":""

},

{

"production_quantity":"0",

"quantity_shipped":"0",

"create_order_time":"2019-08-07",

"order_quantity":"1",

"order_num":"DD190806002",

"shipments_time":"",

"order_info":""

}

]

}

]

},

{

"stone_name":"KX001",

"customer_name":"宝利金",

"customer_id":"293613507226636288",

"child":[

{

"gold_name":"18K白",

"child":[

{

"production_quantity":"2",

"quantity_shipped":"0",

"create_order_time":"2019-08-02",

"order_quantity":"2",

"order_num":"DD190802001",

"shipments_time":"",

"order_info":"手寸17-23中间多"

},

{

"production_quantity":"100",

"quantity_shipped":"0",

"create_order_time":"2019-08-03",

"order_quantity":"100",

"order_num":"DD190803001",

"shipments_time":"",

"order_info":""

}

]

}

]

},

{

"stone_name":"KX007",

"customer_name":"赛菲尔",

"customer_id":"305891049107099648",

"child":[

{

"gold_name":"18K红白分色",

"child":[

{

"production_quantity":"100",

"quantity_shipped":"0",

"create_order_time":"2019-08-07",

"order_quantity":"100",

"order_num":"DD190807001",

"shipments_time":"",

"order_info":""

}

]

}

]

},

{

"stone_name":"KX012",

"customer_name":"金六福吉祥",

"customer_id":"317482253271699456",

"child":[

{

"gold_name":"18K红白分色",

"child":[

{

"production_quantity":"72",

"quantity_shipped":"0",

"create_order_time":"2019-08-03",

"order_quantity":"72",

"order_num":"DD190803002",

"shipments_time":"",

"order_info":"手寸19-22"

}

]

}

]

},

{

"stone_name":"KX009",

"customer_name":"金麒",

"customer_id":"307300237871943680",

"child":[

{

"gold_name":"18K红",

"child":[

{

"production_quantity":"40",

"quantity_shipped":"0",

"create_order_time":"2019-08-05",

"order_quantity":"40",

"order_num":"DD190805001",

"shipments_time":"",

"order_info":"不要钉珠"

}

]

}

]

}

]

}

页面显示效果

js调用方法

let a = tableData(res.list, [{ name: 'gold_name', value: '小计' },{ name: 'customer_name', value: '合计' },{ name: 'customer_name', value: '总计',totalData:true}]);

res.list 为接口返回的数据

// 数据报表数据处理方法

//arrs 传需要合计的数据的key值 例如[{ name: 'gold_name', value: '小计' },{ name: 'customer_name', value: '合计' },{ name: 'customer_name', value: '总计' }]

//相同的 name 没有办法做处理

export function tableData(list, arrs = [], parent = {}) {

let newList = []

if (Array.isArray(list) && list.length > 0) {

list.map(item => {

let key_of_arr = Object.keys(item).filter(el => Array.isArray(item[el]));//获取当前对象中value为数组的key值

let key_of_string = Object.keys(item).filter(el => !Array.isArray(item[el]));//获取当前对象中value不为数组的key值

let bol = key_of_arr.length > 0 ? key_of_arr.every(el => el && item[el].length > 0) : false;//判断当前对象中是否存在数组 true为存在 false为不存在

let data = {};

let parent_keys = Object.keys(parent).filter(el => !Array.isArray(parent[el]));//获取从上级数据中出入的不为数组的key值

if (parent_keys.length > 0) {//如果存在key 将key保存

parent_keys.forEach(el => { data[el] =parent[el] });

}

if (!bol) {//如果当前对象中没有数据组或数组的长度小于1 则将数据拼接并放入返回的数据中

newList.push(Object.assign(data, item))

} else {

if (key_of_string.length > 0) {//将前一层的数据合并到当前数据层中

key_of_string.forEach(el => { data[el] =item[el]});

}

let arr = tableData(item[key_of_arr[0]],arrs, data)

newList = [...newList, ...arr]//合并数组

if(arrs.length>0){

let num=key_of_string.reduce((prev, curr) =>arrs.findIndex(el=>el.name==curr&&!el.totalData)>-1?prev+=1:prev,0)//判断合并数组中在当前数据中出现的次数

if(num>0){

let totalData=JSON.parse(JSON.stringify(data));

key_of_string.forEach(el=>{//给当前数据赋值

let index=arrs.findIndex(els=>els.name==el)

if(index>=0){

for(let i=0;iObject.keys(el).every(els=>data[els]?data[els]==el[els]:(arrs.findIndex(i=>i.name==els)>-1?arrs.find(i=>i.name==els).value!=el[els]:true)))

Object.keys(total[0]).forEach(el=>{//算合计

if(!isNaN(Number(total[0][el]))){

if(el.indexOf('num')>-1){

totalData[el]=total.map(els=>els[el]).reduce((prev, curr) => Number(prev || 0) + Number(curr || 0))

} else{

totalData[el]=total.map(els=>els[el]).reduce((prev, curr) => Number(prev || 0) + Number(curr || 0)).toFixed(5)

}

}

})

newList.push(totalData)

}

}

}

})

if(JSON.stringify(parent)=='{}'&&arrs.length>0&&arrs[arrs.length-1].totalData){//判断最后一条有没有所有数据汇总

let last=newList.filter(el=>arrs.every(els=>els.totalData?(el[els.name]!=els.value):(el[els.name]==els.value)))

let lastData={};

Object.keys(last[0]).forEach(el=>{

if(!isNaN(Number(last[0][el]))&&el!=arrs[arrs.length-1].name){

if(el.indexOf('num')>-1){

lastData[el]=last.map(els=>els[el]).reduce((prev, curr) => Number(prev || 0) + Number(curr || 0))

} else{

lastData[el]=last.map(els=>els[el]).reduce((prev, curr) => Number(prev || 0) + Number(curr || 0)).toFixed(5)

}

}else if(el==arrs[arrs.length-1].name){

lastData[el]=arrs[arrs.length-1].value;

}else{

lastData[el]=last[0][el]

}

})

newList.push(lastData)

}

}

return newList;

}

原生table html,html table 原生表格数据处理方法相关推荐

  1. Python表格数据处理方法

    Python表格数据处理方法 记录了一些机器学习与数模的过程中常用到的代码 数据读写 import numpy as np import pandas as pd excel数据(.xlsx) dat ...

  2. 小学计算机教案表格式,小学信息技术教案表格数据处理.docx

    小学信息技术教案表格数据处理 小学信息技术教案表格数据的处理 表格数据的处理 一.教学目标: 1.知识与技能:(1).理解信息的表格化.掌握表格数据的处理,能利用公式计算数据:(2).选择恰当的软件加 ...

  3. layui表格 设置默认排序_layui table对表格数据处理后的排序问题

    table模块是layui最核心的组成之一,它用于对表格进行一些列功能和动态化数据操作.在 table模块对表格数据处理后排序可能出现问题,本文就来为大家介绍一下解决这种问题的方法. 使用layui ...

  4. layui table 表头合并_layui 动态表格之合并单元格

    需求: 下面用excel表格大概模拟下需求,左边是原来的,要改成右边这样的: ①第一步:再生成表格后调用此方法,以合并重复的单元格 done : function(res, curr, count) ...

  5. html页面的th标签合并,Table tr th td html表格标签

    Table tr th td html表格标签教程-- html table tr td�?strong>html table tr th表格布局标签教程�?/p> 学习DIV CSS回头 ...

  6. layui数据表格解析html,layui框架table 数据表格的方法级渲染详解

    layui框架table 数据表格的方法级渲染详解 如下所示: //js 规范书写 var tst=table.render({ elem: '#test11' ,cols: [[ //标题栏 {ch ...

  7. php如何使用layui.table分页,layui实现数据表格及分页的方法

    一.前端部分 html只需要放一个有id的div就行了,方便js获取渲染区域 js部分需要注意url为异步数据接口,done是渲染完表格之后的回调函数table.render({ elem: '#da ...

  8. html table清空数据,javascript清空table表格的方法

    本文实例讲述了javascript清空table表格的方法.分享给大家供大家参考.具体如下: 1. 通常方法 循环table的rows,然后一个一个删除. 这个方法是通常的方法,可行,但是效率不好. ...

  9. iden中html中表格自动生成,JS实现动态生成html table表格的方法分析

    本文实例讲述了JS实现动态生成html table表格的方法.分享给大家供大家参考,具体如下: 刚在论坛上面逛的时候看到有人问html表格怎么动态生成,我回了一下发现有好多小伙伴追问- - 看来还是有 ...

最新文章

  1. ffmpeg architecture(下)
  2. HBase总结(十三)HBase Shell 常用命令及例子
  3. asp格式化日期函数
  4. c语言类型名占字节,在C语言中,不同类型数据所占字节数
  5. soap php 分开类,将请求处理到同一PHP SOAP服务器中的多个类
  6. direct wifi 芯片_WiFi Direct将在终端大放异彩
  7. Centos 7 更改系统语言为中文
  8. QUdpSocket
  9. fltk在UbuntuLinux中搭建和测试-《C++程序设计原理与实践》Chapter12:显示模型 环境构建...
  10. GitLab之不允许用户注册-yellowcong
  11. 金蝶KIS专业版单据序时簿看不到的问题
  12. Android UI开发神兵利器之设计资源
  13. linux命令行连接蓝牙音箱,有些Linux发行版用蓝牙连接天猫精灵和小爱音箱没声音...
  14. java 适配器模式详解_JAVA设计模式详解(五)----------适配器模式
  15. (三)JMockit API:@Mocked -基础篇
  16. 社交数据在征信领域的应用探索
  17. Kotlin协程实现原理
  18. Nuxt在SPA模式下的鉴权处理(1)
  19. 安防工程商选择千兆POE交换机的注意事项
  20. unity接入讯飞AIUI(Windows SDK)

热门文章

  1. JAVA Thread.sleep实现原理
  2. 周亚军 红宝书 案例 3 SSH远程管理协议
  3. Web打印控件Lodop实现证件套打
  4. AV1技术学习之Chroma from Luma(CfL)
  5. 合并区间 · Merge Intervals 插入区间 · Insert Interval
  6. 10分钟学会如何使用高权重网站简书引流
  7. GUI_Type.h和GUI.h
  8. Mysql创建外键错误原因分析
  9. 如何保存在线文档html,将文档保存为网页
  10. 委托和继承(Delegation and Inheritance)