最近做的项目涉及到很多单元格合并问题,element-ui组件对于单元格合并的处理虽然很灵活,但是需要事先计算好每个单元格合并的rowspan和colspan,直接在span-method属性中计算实现起来有点困难,所以我拿到列表后先把每条数据的需要合并的rowspan计算出来然后直接在span-method属性中返回即可。上代码:

export const merge = function(
colArr,
list
) {
var allProps = [];
colArr.forEach((props, index) => {
allProps.push(...props);
list = getLevel(props, allProps, list);
});
return list;
}; //组装层
function getLevel(props, allProps, list) {
var rowKey = {};
for (var item of list) {
let propInfo = getPropStr(allProps, item);
if (rowKey[propInfo.key]) {
rowKey[propInfo.key].children.push(item);
} else {
let obj = propInfo;
obj.children = [item];
rowKey[propInfo.key] = obj;
}
}
let info = [];
for (var key in rowKey) {
rowKey[key].children.forEach((item, index) => {
if (index == 0) {
item = Object.assign(
item,
getMergeInfo(props, rowKey[key].children.length)
);
} else {
item = Object.assign(item, getMergeInfo(props, 0));
}
info.push(item);
});
}
return info;
} //获取合并信息
function getMergeInfo(props, num) {
let obj = {};
props.forEach(item => {
obj[item + "_merge"] = {
rowspan: num,
colspan: 1
};
});
return obj;
}
// 把属性的值拼接在一起,并和属性的值一起返回。
function getPropStr(props, info) {
let obj = {};
let propStr = props.map(item => {
obj[item] = info[item];
return info[item];
});
obj.key = propStr.toString();
return obj;
}

 导进去直接调用:

var colArr = [["id", "grade"], ["class"]];
var list = [
{ id: 1, grade: 1, class: 1, name: "张三" },
{ id: 1, grade: 1, class: 1, name: "李四" },
{ id: 1, grade: 1, class: 2, name: "王五" },
{ id: 1, grade: 1, class: 2, name: "找六" },
{ id: 2, grade: 2, class: 7, name: "张三_1" },
{ id: 2, grade: 2, class: 7, name: "李四_1" },
{ id: 2, grade: 2, class: 3, name: "王五_1" },
{ id: 2, grade: 2, class: 3, name: "找六_1" }
];
merge(colArr, list)

 

备注:colArr是要合并的层级。示例中id和grade是第一次,class是第二层。
    list是数据列表。

  

最新文章

  1. C# 的TCP Socket (异步方式)
  2. guava学习--ratelimiter
  3. HTTP与AJAX深入揭秘,不使用AJAX实现页面无刷新
  4. 转 XenServer、XenCenter安装测试
  5. 转载:DIV+CSS有可能遇到的问题
  6. U当家U盘启动盘制作教程
  7. 产品专家Marty Cagan:不做仅仅会编码的人
  8. Struts2--课程笔记3
  9. 函数式编程--为什么会出现lambda表达式?
  10. Java long类型和Long类型的那些事
  11. Java编程语言下Selenium驱动各个浏览器代码
  12. Core在类中注入
  13. noip第27课资料
  14. struts2框架学习之第一天
  15. WP8.1学习系列(第五章)——中心控件Hub或透视控件Pivot交互UX
  16. [Oracle]Oracle之Chr函数返回
  17. c++ 匹配相邻元素相等的元素(adjacent_find)
  18. xsl如何实现递归复制?
  19. 微商营销实战技巧分享,轻松月入10W
  20. 终于想明白一些事,关于NAS

热门文章

  1. ModuleNotFoundError: No module named 'phkit.pinyin'
  2. vue : 检测用户上传的图片的宽高
  3. 宽度优先搜索--------迷宫的最短路径问题(dfs)
  4. sed 指定行范围匹配
  5. ubuntu18.04安装opencv+CUDA10.2+cuDNN+YOLOv3
  6. Django学习路24_乘法和除法
  7. 使用 MySQLi 和 PDO 向 MySQL 插入数据
  8. PHP asinh() 函数
  9. 7.9 NOI模拟赛 A.图 构造 dfs树 二分图
  10. luogu P6583 回首过去 简单数论变换 简单容斥