// 来源:https://www.nzw6.com
《layui表格求差_xls表格求差》
在处理表格数据时,常常需要对不同表格的数据进行求差操作。针对layui表格和xls表格求差的问题,解决方案是通过读取表格数据,然后根据关键字段(如id等)进行比较计算差值。
一、layui表格与xls表格数据读取
对于layui表格,如果是前端展示的表格,可以利用layui提供的接口获取表格数据。例如:
javascript
var tableIns = layui.table.render({
elem: '#test'
,url:'/demo/table/user/' //模拟接口
,cols: [[
{field:'id', title: 'ID', sort: true}
,{field:'username', title: '用户名'}
,{field:'experience', title: '经验值'}
,{field:'sex', title: '性别'}
,{field:'city', title: '城市'}
,{field:'sign', title: '签名'}
]]
});
// 获取表格数据
var data = tableIns.data;
而对于xls表格,可使用node - xlsx等库读取。以node.js环境为例:
```javascript
const xlsx = require('node - xlsx');
const fs = require('fs');
function parseXlsx(filePath) {
const workSheetsFromFile = xlsx.parse(fs.readFileSync(filePath));
return workSheetsFromFile[0].data; //假设只有一张工作表
}
```
二、求差思路一:基于id直接对比
如果两个表格都有的id字段。先将layui表格数据和xls表格数据都转换为对象数组格式,以id作为键。
javascript
let layuiDataObj = {};
data.forEach(item => {
layuiDataObj[item.id] = item;
});</p>
<p>let xlsDataObj = {};
let xlsData = parseXlsx('path/to/xls/file.xlsx'); // 假设已获取xls表格数据
xlsData.forEach(item => {
xlsDataObj[item[0]] = item; //假设id在列
});</p>
<p>// 求差
let diffResult = [];
for(let id in layuiDataObj){
if(xlsDataObj[id]){
// 如果存在相同id,计算其他字段的差值
let diffItem = {};
for(let key in layuiDataObj[id]){
if(key !== 'id'){
if(layuiDataObj[id][key] !== xlsDataObj[id][xlsData[0].indexOf(key)]){
diffItem[key] = layuiDataObj[id][key] - xlsDataObj[id][xlsData[0].indexOf(key)];
}
}
}
if(Object.keys(diffItem).length > 0){
diffItem.id = id;
diffResult.push(diffItem);
}
}else{
// 如果xls中不存在该id,表示新增的数据
diffResult.push({...layuiDataObj[id]});
}
}</p>
<p>for(let id in xlsDataObj){
if(!layuiDataObj[id]){
// 如果layui中不存在该id,表示删除的数据
diffResult.push({...xlsDataObj[id]});
}
}
三、求差思路二:基于所有字段组合对比
当没有明确的标识字段时,可以将所有字段组合成一个字符串进行对比。
javascript
function generateKey(row,header){
return header.map(col=>row[col]).join('-');
}</p>
<p>let layuiKeys = new Set(data.map(row=>generateKey(row,Object.keys(data[0]))));</p>
<p>let xlsKeys = new Set(xlsData.map(row=>generateKey(row,xlsData[0])));</p>
<p>let onlyInLayui = [...layuiKeys].filter(key=>!xlsKeys.has(key));
let onlyInXls = [...xlsKeys].filter(key=>!layuiKeys.has(key));</p>
<p>// 对于不同的部分再进一步处理,比如找出具体哪些字段有差异等
以上就是layui表格和xls表格求差的一些方法,可以根据实际需求选择合适的方式。