两个数组匹配处理2016.01.02

今天在做项目的时候遇到一个棘手的问题,其实也就是两个数组的逻辑处理。两个数组如下:

数组一:

[{"eventTag":"r1","eventTitle":"分享1"},
{"eventTag":"r2","eventTitle":"分享2"},
{"eventTag":"r3","eventTitle":"分享3"},
{"eventTag":"r6","eventTitle":"分享6"}]

数组二:(为r)

[{"eventTime":"20151229",
"eventList":[
{"eventTag":"r2","eventTitle":"#分享2","eventVal":2},  {"eventTag":"r7","eventTitle":"#分享7","eventVal":5}
]},
{"eventTime":"20151228",
"eventList":[
{"eventTag":"r3","eventTitle":"#分享3","eventVal":9},  {"eventTag":"r6","eventTitle":"#分享6","eventVal":4}]
}]

其最终的结果要求就是:

根据选中数组一中的eventTitle来确定数组二中与数组一选中的eventTitle来进行匹配展示。

如:选中:分享1、分享2、分享3、分享6**
则:

时间分享1分享2分享3分享6
201512290200
201512280030

编程思路:

  • 根据勾选数组一得到titleList:[],titleTagList:[]
  • 根据数组二中eventTag匹配titleTagList记录存在与否 ppData:[]
    ppData:[[“20151229”,”次数/下标”],[“20151228”,”次数/下标”]]的格式
  • 解析ppData这个二维数组得到最终结果
    通过ppData数组的值去替换所对应下标的次数得最终的结果

代码:

var ppData=[];
var recordNumArr=[],recordLengthArr=[];
//得到匹配的title列表数据
for(var i=0;i<r.length;i++){
  var sz=[];
  sz.push(r[i].EventTime);
  var recordNum=0,recordLength=r[i].EventList.length;
  for(var j=0;j<r[i].EventList.length;j++){
    for(var k=0;k<vm.titleTagList.length;k++){
      if(r[i].EventList[j].EventTag==vm.titleTagList[k]){
        var s=r[i].EventList[j].EventVal+"/"+k;
        sz.push(s);
      }else{
        recordNum++;
      }
    }
  }
  recordNumArr.push(recordNum);
  recordLengthArr.push(recordLength);
  ppData.push(sz);
}

var recorHasRun=0;
for(var x=0;x<r.length;x++){
  var szi=[];var recorHas=0;
  szi.push(r[x].EventTime);
  for(var q=0;q<recordNumArr.length;q++){
    if(recordNumArr[q]==recordLengthArr[q]){              
        if(recorHas==0){
          for(var l=0;l<vm.titleList.length;l++){
            szi.push(0);
          }
          console.log(szi);
          vm.dataAll.push(szi);

          recorHas++;
          recordNumArr.splice(q,1);recordLengthArr.splice(q,1);
        }
    }else{
      if(recorHasRun==0){
        recorHasRun++;
        recordNumArr.splice(q,1);recordLengthArr.splice(q,1);
        run(ppData);
      }
    }

  }
}

function run(arrs){
  var indexPPArr=aars;  
  //处理二维数组
  for(var ii=0;ii<indexPPArr.length;ii++){
    var lastsz=[];console.log(indexPPArr[ii]);
    lastsz.push(indexPPArr[ii][0]);
    for(var jj=0;jj<vm.titleList.length;jj++){
      lastsz.push(0);
    }

    for(var kk=1;kk<indexPPArr[ii].length;kk++){
        for(var z=0;z<vm.titleTagList.length;z++){
          var resolveIndex=indexPPArr[ii][kk];
          var ss=resolveIndex.split("/");
          var editIndex=parseInt(ss[1])+1;
          lastsz.splice(editIndex,1,ss[0]);
        }
    }   
    vm.dataAll.push(lastsz);
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值