在项目中,有时候会遇到一些需求,比如行程安排,或者考勤状态。后台返回的获取是这一周的每一天的状态,但是我们前端需求显示就是要把相邻的且状态相同的数据进行合并,所以我们就要重新组合返回的数据。
源数据:
let data = [
{"TYPE": "01", "REMARK": "休假"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "02", "REMARK": "上海出差"},
{"TYPE": "02", "REMARK": "北京出差"},
{"TYPE": "04", "REMARK": "休息"},
{"TYPE": "04", "REMARK": "休息"}
]
目标数据:
let target = [
{"TYPE": "01", "REMARK": "休假", "KEY": "01休假", "COUNT": 1},
{"TYPE": "03", "REMARK": "在班", "KEY": "03在班", "COUNT": 2},
{"TYPE": "02", "REMARK": "上海出差", "KEY": "02上海出差", "COUNT": 1},
{"TYPE": "02", "REMARK": "北京出差", "KEY": "02北京出差", "COUNT": 1},
{"TYPE": "04", "REMARK": "休息", "KEY": "04休息", "COUNT": 2}
]
我们可以通过 TYPE 和 REMARK 两个 key 对应的 value 共同决定是否合并属性,代码如下:
let newdata = []
let index = 1;
let i = 0;
for(let k in data){
let {TYPE,REMARK} = data[i];
let {TYPE:TYPE2,REMARK:REMARK2} = data[i+1]||{}
i++;
if(TYPE==TYPE2 && REMARK==REMARK2){ //类型相同且内容相同
index++;
}else{
newdata.push({
...data[k],
KEY:TYPE+REMARK,
COUNT:index
})
index = 1;
}
}
console.log(newdata)
更多案例:vue 对象数组中,根据相同属性的数据合并,重组新的数组对象