考勤名单node统计

9 篇文章 0 订阅

名单内容如下:
在这里插入图片描述

const xlsx = require("node-xlsx"), 
    fs = require('fs'),
    excelData = xlsx.parse("name.xlsx"); 

let meth = {
    /* 
    arr
    数据转格式
    [
        [ '全部人员名单', 3.16, 3.16 ],
        [ '蒋勇军', '陈广程', '李慧娜' ]
    ]
    */
    getRealData : (arr)=>{
        let title = arr[0];
        let content = arr.slice(1,arr.length - 1);
        let returnData = [];
        let returnJsp = {};
        title.forEach((item,index)=>{
            let nameArr = [];
            arr.forEach((name_item,name_index)=>{
                if(name_index != 0){
                    if(name_item[index]){ // 名称中有特殊符号
                        let reg = /[\u4e00-\u9fa5]/g;
                        let val =  name_item[index].match(reg);
                        if(val){
                            nameArr.push(val.join(''));
                        }
                    }else{
                        nameArr.push(name_item[index]);
                    }
                }
            })
            returnData.push(nameArr);
            returnJsp[item] = nameArr;
        })
        return {
            arr : returnData,
            jsp : returnJsp
        };
    },
    /* 
    arr
    每天的缺勤人员统计总数
    [
        [ '蒋勇军','谷昊','李健'],
        [ '贺志轩','陈广程','邓丽欣'],
    ]
    */
    compareData : (arr)=>{
        let arrName = arr[0]; // 所有的人员名单(第一列)
        let lostName = []; // 缺勤人员名单
        arr.forEach((item,index)=>{
            if(index != 0){
                let lost = arrName.concat(item).filter(function(v, i, arr) {
                    return arr.indexOf(v) === arr.lastIndexOf(v);
                });
                lostName = lostName.concat(lost);
            }
        })
        return lostName;
    },
    /* 当天的缺勤名单 */
    compareToday : (allArr,arr)=>{
        let arrName = allArr[0]; // 所有的人员名单(第一列)
        let lost = arrName.concat(arr).filter(function(v, i, arr) {
            return arr.indexOf(v) === arr.lastIndexOf(v);
        });
        return lost;
    },
    /* 缺勤次数 */
    mostName : (arr)=>{
        let names = {};
        let nameArr = [];
        arr.forEach((item,index)=>{
            if(names[item]){
                names[item] += 1;
            }else{
                names[item] = 1;
            }
        })
        for(let i in names){
            nameArr.push({"姓名:":i,"缺勤次数:":names[i]})
        }
        return nameArr.sort((n1,n2)=>{
            return n2["缺勤次数:"] - n1["缺勤次数:"];
        })
    }
}

excelData.forEach((item,index)=>{
    if(index == 0){
       let allData = meth.getRealData(item.data);  // 数据转格式
        // console.log(allData);
        let lostData = meth.compareData(allData.arr); // 总的缺勤名单
        // console.log(lostData);
        let mostName = meth.mostName(lostData); // 总的缺勤次数
        // console.log(mostName)
        let currentDay = process.argv.slice(2);
        let lostToday = meth.compareToday(allData.arr,allData.jsp[currentDay]); // 当天的缺勤人员
        console.log(lostToday);
    }
})

如果想要查看那个列对应的缺勤人员,不用编辑器打开,直接命令
node getname 4.2am (4.2上午)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值