首页 > 其他分享 >js数据结构变化 table动态列展示

js数据结构变化 table动态列展示

时间:2023-05-04 21:36:12浏览次数:41  
标签:supplierDocName taxprice js element mainNum table elementj 数据结构 productName

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="TYMD">1231231</div>
</body>


</html>

<script>
    let oneData = {
        "code": 200,
        "message": "操作成功",
        "data": {
            "flag": [{
                "unit": "公斤(千克)",
                "productCode": "01.02.01.001.00003",
                "supplierDocName": "武汉钢铁江北集团有限公司精密带钢厂",
                "taxprice": "20",
                "mainNum": 350,
                "cName": "月结30天(30%电汇和70%半年电子银承)",
                "nmny": 7000,
                "nnum": "0~3000",
                "productName": "荧光粉",
                "productType": "珠江光电三基色绿粉 tb8.5-T8 荧光粉 T8 USC LGOSR-04"
            }, {
                "unit": "公斤(千克)",
                "productCode": "01.02.01.001.00003",
                "supplierDocName": "武汉钢铁江北集团有限公司精密带钢厂",
                "taxprice": "19",
                "mainNum": 350,
                "cName": "月结30天(30%电汇和70%半年电子银承)",
                "nmny": 6650,
                "nnum": "3000~7000",
                "productName": "荧光粉",
                "productType": "珠江光电三基色绿粉 tb8.5-T8 荧光粉 T8 USC LGOSR-04"
            }, {
                "unit": "个",
                "productCode": "03.03.20.001.0021",
                "supplierDocName": "武汉钢铁江北集团有限公司精密带钢厂",
                "taxprice": "29",
                "mainNum": 200,
                "cName": "月结30天(30%电汇和70%半年电子银承)",
                "nmny": 5800,
                "nnum": "0~5000",
                "productName": "020白色贴片",
                "productType": "E020UW45-40"
            }, {
                "unit": "个",
                "productCode": "03.03.20.001.0021",
                "supplierDocName": "武汉钢铁江北集团有限公司精密带钢厂",
                "taxprice": "15",
                "mainNum": 200,
                "cName": "月结30天(30%电汇和70%半年电子银承)",
                "nmny": 3000,
                "nnum": "5000~8000",
                "productName": "020白色贴片",
                "productType": "E020UW45-40"
            }, {
                "unit": "公斤(千克)",
                "productCode": "01.02.01.001.00003",
                "supplierDocName": "广州铜材厂有限公司",
                "taxprice": "20",
                "mainNum": 350,
                "nmny": 7000,
                "nnum": "0~3000",
                "productName": "荧光粉",
                "productType": "珠江光电三基色绿粉 tb8.5-T8 荧光粉 T8 USC LGOSR-04"
            }, {
                "unit": "公斤(千克)",
                "productCode": "01.02.01.001.00003",
                "supplierDocName": "广州铜材厂有限公司",
                "taxprice": "19",
                "mainNum": 350,
                "nmny": 6650,
                "nnum": "3000~7000",
                "productName": "荧光粉",
                "productType": "珠江光电三基色绿粉 tb8.5-T8 荧光粉 T8 USC LGOSR-04"
            }, {
                "unit": "个",
                "productCode": "03.03.20.001.0021",
                "supplierDocName": "广州铜材厂有限公司",
                "taxprice": "23",
                "mainNum": 200,
                "nmny": 4600,
                "nnum": "0~5000",
                "productName": "020白色贴片",
                "productType": "E020UW45-40"
            }, {
                "unit": "个",
                "productCode": "03.03.20.001.0021",
                "supplierDocName": "广州铜材厂有限公司",
                "taxprice": "15",
                "mainNum": 200,
                "nmny": 3000,
                "nnum": "5000~8000",
                "productName": "020白色贴片",
                "productType": "E020UW45-40"
            }]



        }
    }

    let twoData = oneData.data.flag;
    console.log(twoData);

    let PersonCollect =
        twoData.reduce((total, cur, index) => {
            let hasValue = total.findIndex(current => {

                return current.unit === cur.unit &&
                    current.productCode == cur.productCode &&
                    current.productName == cur.productName &&
                    current.productType == cur.productType &&
                    current.mainNum == cur.mainNum &&
                    current.nnum == cur.nnum
            })
            hasValue === -1 && total.push(cur)
                // hasValue !== -1 && (total[hasValue].Expenses = floatObj.add(Number(total[hasValue].Expenses), Number(cur.Expenses)));
            return total
        }, []).map(item => {

            let dataOption = {
                unit: item.unit,
                productCode: item.productCode,
                productName: item.productName,
                productType: item.productType,
                mainNum: item.mainNum,
                nnum: item.nnum
            }
            return dataOption;
        })

    console.log(PersonCollect);
    let ctList = [];
    let tyList = [];

    for (let i = 0; i < PersonCollect.length; i++) {
        const elementi = PersonCollect[i];
        let list = {
            unit: elementi.unit,
            productCode: elementi.productCode,
            productName: elementi.productName,
            productType: elementi.productType,
            mainNum: elementi.mainNum,
            nnum: elementi.nnum,
        };
        let index = 0;

        for (let j = 0; j < twoData.length; j++) {
            const elementj = twoData[j];
            if (
                elementi.unit == elementj.unit &&
                elementi.productCode == elementj.productCode &&
                elementi.productName == elementj.productName &&
                elementi.productType == elementj.productType &&
                elementi.mainNum == elementj.mainNum &&
                elementi.nnum == elementj.nnum
            ) {
                index++;


                // list[0][`taxprice${index}`] = elementj.taxprice ? elementj.taxprice : elementj.taxprice;
                // list[0][`nmny${index}`] = elementj.nmny ? elementj.nmny : elementj.nmny;
                // list[0][`supplierDocName${index}`] = elementj.supplierDocName ? elementj.supplierDocName : elementj.supplierDocName;
                // list[0][`cName${index}`] = elementj.cName ? elementj.cName : elementj.cName;

                list[`taxprice${elementj.supplierDocName}`] = elementj.taxprice ? elementj.taxprice : elementj.taxprice;
                list[`nmny${elementj.supplierDocName}`] = elementj.nmny ? elementj.nmny : elementj.nmny;
                list[`${elementj.supplierDocName}`] = elementj.supplierDocName ? elementj.supplierDocName : elementj.supplierDocName;
                list[`cName${elementj.supplierDocName}`] = elementj.cName ? elementj.cName : elementj.cName;

                tyList.push(elementj.supplierDocName);
            }
        };
        ctList.push(list);
    };

    tyList = [...new Set(tyList)];
    console.log(tyList);

    // tyList =  ["武汉钢铁江北集团有限公司精密带钢厂", "广州铜材厂有限公司"];
    console.log(ctList);


    var tableTitle = '';
    tyList.forEach((item) => {
        tableTitle = tableTitle + '<col width="100"></col>'
    });


    console.log(tableTitle);



    let tablebody = "";
    let MRow = "";
    let tablebottom = "";
    let rowtable = "";

    tyList.forEach((item, index) => {
        MRow = MRow +
            '<td colspan="3" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `${item}` + '</span></td>'
    });
    MRow += '</tr>' + '<tr>';

    tyList.forEach((item, index) => {
        rowtable = rowtable +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `含税单价` + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `含税总价` + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `付款协议` + '</span></td>'
    });
    rowtable += '</tr>';

    tablebody = '<tr>' +
        '<td  rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `物料编码` + '</span></td>' +
        '<td rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `物料名称` + '</span></td>' +
        '<td rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:140px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `规格型号` + '</span></td>' +
        '<td rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `单位` + '</span></td>' +
        '<td rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `数量` + '</span></td>' +
        '<td rowspan="2" style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;font-weight: bolder;text-align: center;"><span>' + `阶梯数量` + '</span></td>' +
        MRow + rowtable;

    console.log(ctList);

    for (let i = 0; i < ctList.length; i++) {
        const element = ctList[i];

        tablebottom += '<tr>';
        tablebottom +=
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element["productCode"] ? element["productCode"] : '') + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element["productName"] ? element["productName"] : '') + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:140px;padding: 0 5px 0 5px;"><span>' + (element["productType"] ? element["productType"] : '') + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element["unit"] ? element["unit"] : '') + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element["mainNum"] ? element["mainNum"] : '') + '</span></td>' +
            '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element["nnum"] ? element["nnum"] : '') + '</span></td>'

        for (let j = 0; j < tyList.length; j++) {
            const object = tyList[j];
            tablebottom +=
                // '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element[`${object}`] ? element[`${object}`] : '') + '</span></td>' +
                '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element[`taxprice${object}`] ? element[`taxprice${object}`] : '') + '</span></td>' +
                '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element[`nmny${object}`] ? element[`nmny${object}`] : '') + '</span></td>' +
                '<td style="border: 1px solid;height:30px;line-height:30px;font-size:13px;width:90px;padding: 0 5px 0 5px;"><span>' + (element[`cName${object}`] ? element[`cName${object}`] : '') + '</span></td>'
        }
        tablebottom += '<tr>';
    }




    var tablediv = '<table  style ="border-collapse:collapse;margin: 1px;" ><colgroup><col width="90"></col><col width="90"></col><col width="140"></col><col width="90"></col><col width="90"></col><col width="90"></col>' +
        tableTitle +
        '</colgroup><thead><tr>' +
        '</tr></thead><tbody>' + tablebody + tablebottom +
        '</tbody></table>';

    var htmlTable = '<div id="testdivid" style="display: flex;justify-content: center;margin: 0 auto;margin: 0;padding: 0;"><div id="divTTable" >' + tablediv + '</div></div>';


    TYMD.innerHTML = htmlTable;
</script>

  

 

标签:supplierDocName,taxprice,js,element,mainNum,table,elementj,数据结构,productName
From: https://www.cnblogs.com/LFxanla/p/17372563.html

相关文章

  • CONNECT THE DOTS 挂载操作 jsfuck ftp download 信息收集
    主机发现sudonmap-sT--min-rate10000-p-xx.x.xx.x-oAnmapscan/ports要提取出所有的端口,进行字符操作catnmapscan/ports|grepopen|awk-F'/''{print$1}'|tr'\n\r'','sudonmap-sT-sC-sV-O-pxx.xx.xx.xx-oAnmapscan/......
  • js基础---数组操作(破坏性改变数组)
    数组元素的crudpush():像数组末尾添加一个或多个元素并返回数组的新长度pop():删除并返回数组的最后一个元素unshift():像数组的开头添加一个或多个元素,并返回数组的长度shift:删除并返回数组的第一个元素splice(1,3,“111”):删除添加插入替换数组中的元素.(删除包括第一个坐标元素后面的三......
  • Vue.js 教程:如何使用 Mock.js 进行前端开发
    Mock.js 是常用的生成随机数据,拦截Ajax请求的JavaScript库。在软件开发的初期,后端API接口可能还没有实现或者还没有完全实现。在这种情况下,用Mock.js可以模拟后端API供前端开发人员调用,从而避免等待后端API的完成。要在Vue项目中使用Mock.js有两个思路:在客户端拦......
  • 简单聊聊,HashMap、HashTable、ConcurrentHashMap 之间的区别
    一、直观上的区别HashTable和HashMap都是用于存储键值对的数据结构我们一般把搜索的数据称之为关键字(key),与关键字key对应的为值(value),这种模型统称为“key-value的键值对”。Map和Table采用的都是key-Value模型,例如:有一个字符串,统计其中每个字符出现的次数,......
  • ARM Linux安装node.js和node-red
    SA515安装node.js和node-red1.先安装node.js直接官网下载ARMv7版可执行文件:https://nodejs.org/en/download当前使用的最新版本:https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-armv7l.tar.xz2.导入开发板,这里以/usrdata为例adbpushnode-v18.16.0-linux-armv7l......
  • ENOENT: no such file or directory, open 'D:\Idea lorkSpacecjccx-ui\package.js
     启动项目报找不到package.json找到你项目的package.json的路径 然后cd 这个路径 然后就解决了......
  • react.js学习笔记
    (1)      参考文献1.前端技术手册2.在线编码......
  • node.js版本更新及遇到的错
    下载你要更新的版本双击运行一直next然后如果你之前安装过node.js不用管它会覆盖安装安装好之后cmd检查版本号node -v出来版本号那就没有问题但是在启动的时候会报node不是不是内部或外部命令,也不是可运行的程序或批处理文件这个时候呢上百度说是环境的问题但......
  • JS在一个数组中过滤掉另一个数组的简易方法
    filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。every()方法使用指定函数检测数组中的所有元素:如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回true。当有如下需求......
  • # vue 使用 threejs 实现实景看房效果 demo
    vue使用threejs实现实景看房效果demo关于这个threejs实现VR看房效果也超级简单,只需要提供一个思路的话就可以了其实,首先需要一个房间结构的贴图,这个贴图网上有,当然找个合适的也不好找,我找了一上午在别人的demo里面扣了一张出来,代码都是一样的,稍微说一下思路。一张全景......