1. 程式人生 > >二維數組中按子數組首個元素值去重

二維數組中按子數組首個元素值去重

() 二維 過程 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);

這樣還是很簡單噠!

二維數組中按子數組首個元素值去重