今天在做项目的时候遇到一个棘手的问题,其实也就是两个数组的逻辑处理。两个数组如下:
数组一:
[{"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 |
20151229 | 0 | 2 | 0 | 0 |
20151228 | 0 | 0 | 3 | 0 |
编程思路:
- 根据勾选数组一得到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);
}
}