二維數組中按子數組首個元素值去重
阿新 • • 發佈:2017-06-08
() 二維 過程 spl each [] 數據 發送 需要
後臺更新了算法,用來挖掘數據,前臺(我)配合後臺搭建了新頁面,歷時兩周,從 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);
這樣還是很簡單噠!
二維數組中按子數組首個元素值去重