這裏分享一個處理連續數據的兩個辦法,記錄一下,說不定自己以後還會遇到。
(1)純數組類型
如代碼,將裏面連續相同的數字找出來
oldArr = [1,1,,2,3,3,3,7,8,9,15,17,17,18,19,19,19];
function fn(arr){
var result = [],
i = 0;
result[i] = [arr[0]];
arr.reduce(function(prev, cur){
cur === prev ? result[i].push(cur) : result[++i] = [cur];
return cur;
});
return result;
}
fn(oldArr);
執行結果:
(2)數組對象類型
將數組對象中連續cupName相同的數據找出來
var newdata = [
{
"duration": 48,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
},
{
"duration": 27,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
},
{
"duration": 35,
"dataSource": 3,
"cupName": null,
"roundRemark": null
},
{
"duration": 25,
"dataSource": 1,
"cupName": null,
"roundRemark": null
}
];
function fn2(arr){
var result = [],
i = 0;
result[i] = [arr[0]];
arr.reduce(function(prev, cur){
cur.cupName === prev.cupName ? result[i].push(cur) : result[++i] = [cur];
return cur;
});
return result;
}
fn2(newdata);
執行結果:
(3)實用場景
那有什麼實用場景呢?
如下圖數據,這裏呢,需要給每個cupName 相同,且dataSource =3的連續數據,頭部加一個logo,底部和其他數據分開。
思路:
1、將連續的數據找出來,轉換成一個二維數組
fns2(arr) {
var result = [],
i = 0;
result[i] = [arr[0]];
arr.reduce(function(prev, cur) {
cur.cupName === prev.cupName ? result[i].push(cur) : (result[++i] = [cur]);
return cur;
});
return result;
}
想要得到的結果:
[
[{
"duration": 48,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
},
{
"duration": 27,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
}],
[{
"duration": 35,
"dataSource": 3,
"cupName": null,
"roundRemark": null
},
{
"duration": 25,
"dataSource": 1,
"cupName": null,
"roundRemark": null
}]
]
2、 爲連續數據的頭和尾添加標誌(頭是添加logo,尾是隔開和其他數據)
addHeadAndTail(data) {
data.forEach((v) => {
//只有一個元素
if (v.length === 1) {
if (v[0].cupName && v[0].dataSource === 3) {
v[0].head = true;
v[0].end = true;
}
//包含多個元素
} else {
v.forEach((k) => {
if (k.cupName && k.dataSource === 3) {
v[0].head = true;
v[v.length - 1].end = true;
}
});
}
});
return data;
}
想要得到的結果:
[
[{
"head ":true,
"duration": 48,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": "",
},
{
"end ":true,
"duration": 27,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
}],
[{
"duration": 35,
"dataSource": 3,
"cupName": null,
"roundRemark": null
},
{
"duration": 25,
"dataSource": 1,
"cupName": null,
"roundRemark": null
}]
]
3、 將數據在展開爲原來的形式
let data2 = this.addHeadAndTail(data1);
let data3 = [];
data2.forEach((v) => {
data3.push(...v);
});
想要得到的結果:
[
{
"head ":true,
"duration": 48,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": "",
},
{
"end ":true,
"duration": 27,
"dataSource": 3,
"cupName": "對戰平臺測試組",
"roundRemark": ""
},
{
"duration": 35,
"dataSource": 3,
"cupName": null,
"roundRemark": null
},
{
"duration": 25,
"dataSource": 1,
"cupName": null,
"roundRemark": null
}
]