这里分享一个处理连续数据的两个办法,记录一下,说不定自己以后还会遇到。
(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}]上一篇:获取摄像头和麦克风权限_js获取浏览器摄像头和麦克风权限
下一篇:获取网站服务器ip地址,获取网站访问者的IP地址,路径等等Request.ServerVariables - 一起......