鍍金池/ 問答/HTML/ 兩個(gè)二維數(shù)組求和對(duì)比,怎么實(shí)現(xiàn)????需用ES5 JS....

兩個(gè)二維數(shù)組求和對(duì)比,怎么實(shí)現(xiàn)????需用ES5 JS....

  1. 1.是預(yù)估數(shù)組,2是時(shí)間差數(shù)組

圖片描述

  1. 這是業(yè)務(wù)邏輯,第二個(gè)數(shù)組對(duì)應(yīng)狀態(tài)位的值 大于了 第一個(gè)數(shù)組中該狀態(tài)位及之前至上一個(gè)有值狀態(tài)位的值之和 ,就把該狀態(tài)位標(biāo)紅:

圖片描述

  1. _list中第一項(xiàng)大于0的值的下標(biāo)是3值是42,對(duì)應(yīng)table數(shù)組中的前3項(xiàng)0,10,10,10,那業(yè)務(wù)邏輯就是?42?>0+10+10+10?樣式改變?yōu)榧t色,第二項(xiàng)有值的下標(biāo)是6那就是4-6之間的和,46 > 10+10+10,以此類推...

最后一項(xiàng)沒時(shí)間差了und不用管了...

  1. 這是數(shù)組:

var _list = [

        ["采樣",-2],
        ["送檢",null],
        ["簽收",null],
        ["已登記",42],
        ["IOM",null],
        ["離心",null],
        ["去蓋",46],
        ["測(cè)試中",1],
        ["已上傳",962762],
        ["已發(fā)送",undefined]
    ]
    var tableTwo = [
        ["采樣",0],
        ["送檢",10],
        ["簽收",10],
        ["已登記",10],
        ["IOM",10],
        ["離心",10],
        ["去蓋",10],
        ["測(cè)試中",10],
        ["已上傳",10],
        ["已發(fā)送",10]
    ]

  1. 這是目前實(shí)現(xiàn)代碼,獲得了時(shí)間差數(shù)組大于0的值和下標(biāo),昨天做到凌晨實(shí)在是沒轍了...,最后的實(shí)現(xiàn)邏輯要是這樣 if(_list中每一項(xiàng)大于0的值 > 對(duì)應(yīng)tableTwo中對(duì)應(yīng)求到的和){ > 的話對(duì)應(yīng)的樣式顏色變紅,否則不變},第二個(gè)數(shù)組對(duì)應(yīng)狀態(tài)位的值 大于了 第一個(gè)數(shù)組中該狀態(tài)位及之前至上一個(gè)有值狀態(tài)位的值之和 ,就把該狀態(tài)位標(biāo)紅

:

    console.log(tableTwo);  //預(yù)估數(shù)組
    console.log(_list)      //時(shí)間差數(shù)組
    var _listKey = [] ,_listValue = [] ,_listDatas = [];
    for(var i = 0;i < _list.length;i++){
        if(_list[i][1] > 0){
            _listKey.push(i);               
            _listValue.push(_list[i][0])   // >0的值的字段名
            _listDatas.push(_list[i][1])   
        }
    }
    console.log(_listKey)   // >0的值的下標(biāo)
    console.log(_listDatas)   // >0的值
    var sum = 0;
    var tableTwoData = [];
    for(var i = 0,k = 0;i < tableTwo.length;i++){
        
        if(_listKey[k] > i){     //比時(shí)間差數(shù)組下標(biāo)小的下標(biāo)
            console.log(tableTwo[i][1])
            sum += tableTwo[i][1];   //第一個(gè)下標(biāo)的和
        }
       
    }
    console.log(sum)  //第一個(gè)下標(biāo)的和
回答
編輯回答
維他命

之前有人解答過你的問題了,現(xiàn)在我用js還原下他的算法過程給你參考下吧,不過這里順便把變紅也加上了,有點(diǎn)小麻煩圖片描述
初始化個(gè)t=0,遍歷數(shù)組_list,t+=tableTwo[i],如果_list[i]>0,且_list[i]>t,整段變紅(注意k的位置),t=0,然后繼續(xù)
`var _list = [

    ["采樣",-2],
    ["送檢",null],
    ["簽收",null],
    ["已登記",42],
    ["IOM",null],
    ["離心",null],
    ["去蓋",46],
    ["測(cè)試中",1],
    ["已上傳",962762],
    ["已發(fā)送",undefined]
]
var tableTwo = [
    ["采樣",0],
    ["送檢",10],
    ["簽收",10],
    ["已登記",10],
    ["IOM",10],
    ["離心",10],
    ["去蓋",10],
    ["測(cè)試中",10],
    ["已上傳",10],
    ["已發(fā)送",10]
]

var t=0;
    var k=-1;
    for(var i=0;i<_list.length;i++){
        t+=tableTwo[i][1];
        if(_list[i][1]>0){
            if(_list[i][1]>t){
                for(var j=i;j>k;j--){
                    _list[j][0]='red';//變紅
                }
                t=0;
            }
            k=i;
        }
    }
    console.log(_list[i]);

`

2018年5月3日 10:31
編輯回答
裸橙

其實(shí)沒看懂你想表達(dá)什么,可以描述的簡(jiǎn)單一點(diǎn),

2017年1月17日 10:58
編輯回答
夏木

謝邀

  1. 你需要稍微了解一下markdown語法,這樣粘貼代碼才不會(huì)出錯(cuò),現(xiàn)在你貼出來的代碼是有問題的,影響別人理解你的目的
  2. 你所謂的變紅是一種狀態(tài),可以用另外一個(gè)數(shù)組來記錄,或者直接擴(kuò)展你的_list
  3. 此外你的數(shù)據(jù)結(jié)構(gòu)其實(shí)意義不大,特別是對(duì)_list,再次標(biāo)明哪些名稱意義不是特別大,因?yàn)槟阋呀?jīng)是數(shù)組的,數(shù)組是有序的數(shù)據(jù)了。如果_list數(shù)據(jù)也是你自己生成的,建議進(jìn)行優(yōu)化,而且把數(shù)據(jù)標(biāo)準(zhǔn)化,比如沒有undefined,只有整數(shù)數(shù)據(jù)和null這樣一些狀態(tài),這樣才好進(jìn)行后續(xù)處理。

var Leng=10;
var redList=[0,0,0,0,0,0,0,0,0,0];//置紅標(biāo)志數(shù)組,值為1表示置紅
for(var i=0;i<Leng;i++){
    if(_list[i][1] != null ){
        tmpsum=tableTwo[i][1];
        j=i;
        while((j-1>0) && (_list[j-1][1]==null) ){
            j--;
            tmpsum+=tableTwo[j][1];
        }
        if(_list[i][1] > tmpsum){
            redList[i]=1;
        }else{
            redList[i]=0;
        }
    }
}

//后面根據(jù)redList數(shù)據(jù)處理顯示

上述代碼未經(jīng)測(cè)試,你需要調(diào)試一下。

2017年3月9日 05:48