獲取數組中連續相同的元素

這裏分享一個處理連續數據的兩個辦法,記錄一下,說不定自己以後還會遇到。

(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
	}
]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章