码迷,mamicode.com
首页 > 编程语言 > 详细

二维数组中按子数组首个元素值去重

时间:2017-06-08 18:53:11      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:挖掘   对象数组   name   前台   过程   blog   rsa   $scope   大数   

后台更新了算法,用来挖掘数据,前台(我)配合后台搭建了新页面,历时两周,从 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);

这样还是很简单哒!

二维数组中按子数组首个元素值去重

标签:挖掘   对象数组   name   前台   过程   blog   rsa   $scope   大数   

原文地址:http://www.cnblogs.com/guofan/p/6964164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!