可以通過上次的需求,我們通過 TYPE 和 REMARK 兩個 key 對應的 value 共同決定是否合併屬性,我們是可以將兩個屬性進行串聯成一個新的 key,如果這個 key 相同,即兩個條件同時滿足。這裏不僅僅合併相鄰的數據,不相鄰的同種 屬性也會進行合併。
源數據:
let data = [
{"TYPE": "01", "REMARK": "休假"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "02", "REMARK": "上海出差"},
{"TYPE": "02", "REMARK": "北京出差"},
{"TYPE": "04", "REMARK": "休息"},
{"TYPE": "04", "REMARK": "休息"}
]
目標數據:
[{
"TYPE": "01", "REMARK": "休假", "KEY": "01休假", "COUNT": 1}, {
"TYPE": "03", "REMARK": "在班", "KEY": "03在班", "COUNT": 2}, {
"TYPE": "04", "REMARK": "休息", "KEY": "04休息", "COUNT": 2}, {
"TYPE": "02", "REMARK": "上海出差", "KEY": "02上海出差", "COUNT": 1}, {
"TYPE": "02", "REMARK": "北京出差", "KEY": "02北京出差", "COUNT": 1
}]
首頁我們創建 KEY 屬性,KEY 的 value 有 TYPE 和 REMARK 的 value 決定。代碼如下:
let newdata = []
for (let k in data) {
newdata.push({
...data[k],
KEY: data[k].TYPE + data[k].REMARK,
})
}
console.log(newdata)
結果如下:
[{ "TYPE": "01", "REMARK": "休假", "KEY": "01休假"}, { "TYPE": "03", "REMARK": "在班", "KEY": "03在班"}, {
"TYPE": "03", "REMARK": "在班", "KEY": "03在班"}, { "TYPE": "04", "REMARK": "休息", "KEY": "04休息"}, {
"TYPE": "02", "REMARK": "上海出差", "KEY": "02上海出差"}, { "TYPE": "02", "REMARK": "北京出差", "KEY": "02北京出差"}, {
"TYPE": "04", "REMARK": "休息", "KEY": "04休息"}]
下面我們進行相同屬性的數據進行合併,達目如下
let result = []
let map = {}
for(let k = 0; k < newdata.length; k++) {
if(!map[newdata[k].KEY]) {
result.push({
...newdata[k],
COUNT: 1
})
map[newdata[k].KEY] = newdata[k]
}else {
for(let j = 0; j < result.length; j++){
if(result[j].KEY== newdata[k].KEY){
result[j].COUNT++
break;
}
}
}
}
console.log(result)