当前位置: 首页 - 编程技术 - 文章正文

获取数组中连续相同的元素

xiaoqihv

这里分享一个处理连续数据的两个办法,记录一下,说不定自己以后还会遇到。

(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}]
文章地址:https://wenmayi.cn/post/534.html