原生table html,html table 原生表格数据处理方法
数据接口返回的数据格式如下:
{
"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 原生表格数据处理方法相关推荐
- Python表格数据处理方法
Python表格数据处理方法 记录了一些机器学习与数模的过程中常用到的代码 数据读写 import numpy as np import pandas as pd excel数据(.xlsx) dat ...
- 小学计算机教案表格式,小学信息技术教案表格数据处理.docx
小学信息技术教案表格数据处理 小学信息技术教案表格数据的处理 表格数据的处理 一.教学目标: 1.知识与技能:(1).理解信息的表格化.掌握表格数据的处理,能利用公式计算数据:(2).选择恰当的软件加 ...
- layui表格 设置默认排序_layui table对表格数据处理后的排序问题
table模块是layui最核心的组成之一,它用于对表格进行一些列功能和动态化数据操作.在 table模块对表格数据处理后排序可能出现问题,本文就来为大家介绍一下解决这种问题的方法. 使用layui ...
- layui table 表头合并_layui 动态表格之合并单元格
需求: 下面用excel表格大概模拟下需求,左边是原来的,要改成右边这样的: ①第一步:再生成表格后调用此方法,以合并重复的单元格 done : function(res, curr, count) ...
- html页面的th标签合并,Table tr th td html表格标签
Table tr th td html表格标签教程-- html table tr td�?strong>html table tr th表格布局标签教程�?/p> 学习DIV CSS回头 ...
- layui数据表格解析html,layui框架table 数据表格的方法级渲染详解
layui框架table 数据表格的方法级渲染详解 如下所示: //js 规范书写 var tst=table.render({ elem: '#test11' ,cols: [[ //标题栏 {ch ...
- php如何使用layui.table分页,layui实现数据表格及分页的方法
一.前端部分 html只需要放一个有id的div就行了,方便js获取渲染区域 js部分需要注意url为异步数据接口,done是渲染完表格之后的回调函数table.render({ elem: '#da ...
- html table清空数据,javascript清空table表格的方法
本文实例讲述了javascript清空table表格的方法.分享给大家供大家参考.具体如下: 1. 通常方法 循环table的rows,然后一个一个删除. 这个方法是通常的方法,可行,但是效率不好. ...
- iden中html中表格自动生成,JS实现动态生成html table表格的方法分析
本文实例讲述了JS实现动态生成html table表格的方法.分享给大家供大家参考,具体如下: 刚在论坛上面逛的时候看到有人问html表格怎么动态生成,我回了一下发现有好多小伙伴追问- - 看来还是有 ...
最新文章
- ffmpeg architecture(下)
- HBase总结(十三)HBase Shell 常用命令及例子
- asp格式化日期函数
- c语言类型名占字节,在C语言中,不同类型数据所占字节数
- soap php 分开类,将请求处理到同一PHP SOAP服务器中的多个类
- direct wifi 芯片_WiFi Direct将在终端大放异彩
- Centos 7 更改系统语言为中文
- QUdpSocket
- fltk在UbuntuLinux中搭建和测试-《C++程序设计原理与实践》Chapter12:显示模型 环境构建...
- GitLab之不允许用户注册-yellowcong
- 金蝶KIS专业版单据序时簿看不到的问题
- Android UI开发神兵利器之设计资源
- linux命令行连接蓝牙音箱,有些Linux发行版用蓝牙连接天猫精灵和小爱音箱没声音...
- java 适配器模式详解_JAVA设计模式详解(五)----------适配器模式
- (三)JMockit API:@Mocked -基础篇
- 社交数据在征信领域的应用探索
- Kotlin协程实现原理
- Nuxt在SPA模式下的鉴权处理(1)
- 安防工程商选择千兆POE交换机的注意事项
- unity接入讯飞AIUI(Windows SDK)
热门文章
- JAVA Thread.sleep实现原理
- 周亚军 红宝书 案例 3 SSH远程管理协议
- Web打印控件Lodop实现证件套打
- AV1技术学习之Chroma from Luma(CfL)
- 合并区间 · Merge Intervals 插入区间 · Insert Interval
- 10分钟学会如何使用高权重网站简书引流
- GUI_Type.h和GUI.h
- Mysql创建外键错误原因分析
- 如何保存在线文档html,将文档保存为网页
- 委托和继承(Delegation and Inheritance)