名单内容如下:
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上午)