二维数组中按子数组首个元素值去重
后台更新了算法,用来挖掘数据,前台(我)配合后台搭建了新页面,历时两周,从 0 到 现在的联调完毕,呼呼,有累,但更多的是完成工作后的喜悦。
废话不多说,联调过程中遇到一个接口需要传输二维数组,是关于选择句子,然后将文档号和句子号拼接成数组,再压入大数组来向后台发送要保存的数据的。
而前台在存储时,选择的句子会直接存储其所属文档号,这样底层存储的数组就会变成对象数组:
arr = [ {name:***,docNum:0,lineNum:3}, {name:***,docNum:2,lineNum:1}, {name:***,docNum:3,lineNum:2}, {name:***,docNum:0,lineNum:1}, {name:***,docNum:3,lineNum:2}, {name:***,docNum:2,lineNum:3}, ]
接口要求形式则为:
arr = [ [0,2,3], [1,1,2,3] ]
子数组首个元素代表文档号,之后是句子号。
在这坑了用循环占了好久。。。
最后想到了对象的属性的特点才发现原来如此的简单:
//经过循环将对象数组变成这样 $scope.list = [ [1,2], [0,2], [1,3], [0,1], [1,4], ] //接着是去重,使用对象属性的特点,将文档号存成属性名,行号保存为其值 var docNumObj = {} angular.forEach($scope.list, function (obj ,i) { if(!docNumObj[obj[0]]) { docNumObj[obj[0]] = obj[1].toString(); } else { docNumObj[obj[0]] += obj[1].toString(); } }) console.log(docNumObj); //再接着遍历对象属性,拼数组 var finalArr = []; for(var i in docNumObj) { console.log(i); var charsArr = docNumObj[i].split(''); charsArr.unshift(i); finalArr.push(charsArr); } console.log(finalArr);
这样还是很简单哒!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!