vue 对象数组中,相邻的且相同类型和内容的数据合并,重组新的数组对象

在项目中,有时候会遇到一些需求,比如行程安排,或者考勤状态。后台返回的获取是这一周的每一天的状态,但是我们前端需求显示就是要把相邻的且状态相同的数据进行合并,所以我们就要重新组合返回的数据。

源数据:

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 对象数组中,根据相同属性的数据合并,重组新的数组对象

发布了85 篇原创文章 · 获赞 37 · 访问量 15万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章