/** * @Author: River_qiu * @Date: 2021/11/18 */ // 表格单元格合并多列 let [spanObj, pos] = [{}, {}] //spanObj 存储每个key 对应的合并值 //pos 存储的是 key合并值得索引 大概吧 export const dataMethod = (data, isH, allColumns = []) => { //循环数据(行) for (let i in data) { let dataI = data[i] //循环数据内对象,查看有多少key if (allColumns.length > 0) { let preProp = undefined // dataI.historyValue = // 循环列数据 for (let index = 0; index < allColumns.length; index++) { let j = allColumns[index] if (i == 0) { // 第一行,每列至少展示1行 spanObj[j] = [1] pos[j] = 0 } else { if (index == 0) { data[i].historyValue = '' data[i - 1].historyValue = '' } else { data[i].historyValue += data[i][preProp] data[i - 1].historyValue += data[i - 1][preProp] } // e: 当前行数据,k:上一行数据 let [e, k] = [dataI, data[i - 1]] // 判断上一行数据是否存在 // 空数据不合并 // 前一列值相同并且不为空或者为第一列 // 存在当前的列的值与上一行是否一样 // 判断是否有数组规定只允许那几列需要合并单元格的 if ( k && e[j] && (!preProp || (e.historyValue && e.historyValue == k.historyValue)) && e[j] == k[j] && (!isH || isH.length == 0 || isH.includes(j)) ) { //如果上一级和当前一级相当,数组就加1 数组后面就添加一个0 spanObj[j][pos[j]] += 1 spanObj[j].push(0) } else { spanObj[j].push(1) pos[j] = i } preProp = j } } } else { for (let j in dataI) { //如果只有一条数据时默认为1即可,无需合并 if (i == 0) { spanObj[j] = [1] pos[j] = 0 } else { let [e, k] = [dataI, data[i - 1]] //判断上一级别是否存在 , //存在当前的key是否和上级别的key是否一样 //判断是否有数组规定只允许那几列需要合并单元格的 if (k && e[j] && k[j] && e[j] == k[j] && (!isH || isH.length == 0 || isH.includes(j))) { //如果上一级和当前一级相当,数组就加1 数组后面就添加一个0 spanObj[j][pos[j]] += 1 spanObj[j].push(0) } else { spanObj[j].push(1) pos[j] = i } } } } } return spanObj }