两个二维数组求和对比,怎么实现????需用ES5 JS....

  1. 1.是预估数组,2是时间差数组

图片描述

  1. 这是业务逻辑,第二个数组对应状态位的值 大于了 第一个数组中该状态位及之前至上一个有值状态位的值之和 ,就把该状态位标红:

图片描述

  1. _list中第一项大于0的值的下标是3值是42,对应table数组中的前3项0,10,10,10,那业务逻辑就是 42 >0+10+10+10 样式改变为红色,第二项有值的下标是6那就是4-6之间的和,46 > 10+10+10,以此类推...

最后一项没时间差了und不用管了...

  1. 这是数组:

var _list = [

        ["采样",-2],
        ["送检",null],
        ["签收",null],
        ["已登记",42],
        ["IOM",null],
        ["离心",null],
        ["去盖",46],
        ["测试中",1],
        ["已上传",962762],
        ["已发送",undefined]
    ]
    var tableTwo = [
        ["采样",0],
        ["送检",10],
        ["签收",10],
        ["已登记",10],
        ["IOM",10],
        ["离心",10],
        ["去盖",10],
        ["测试中",10],
        ["已上传",10],
        ["已发送",10]
    ]

  1. 这是目前实现代码,获得了时间差数组大于0的值和下标,昨天做到凌晨实在是没辙了...,最后的实现逻辑要是这样 if(_list中每一项大于0的值 > 对应tableTwo中对应求到的和){ > 的话对应的样式颜色变红,否则不变},第二个数组对应状态位的值 大于了 第一个数组中该状态位及之前至上一个有值状态位的值之和 ,就把该状态位标红

:

    console.log(tableTwo);  //预估数组
    console.log(_list)      //时间差数组
    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的值的下标
    console.log(_listDatas)   // >0的值
    var sum = 0;
    var tableTwoData = [];
    for(var i = 0,k = 0;i < tableTwo.length;i++){
        
        if(_listKey[k] > i){     //比时间差数组下标小的下标
            console.log(tableTwo[i][1])
            sum += tableTwo[i][1];   //第一个下标的和
        }
       
    }
    console.log(sum)  //第一个下标的和
阅读 4.4k
3 个回答

其实没看懂你想表达什么,可以描述的简单一点,

之前有人解答过你的问题了,现在我用js还原下他的算法过程给你参考下吧,不过这里顺便把变红也加上了,有点小麻烦图片描述
初始化个t=0,遍历数组_list,t+=tableTwo[i],如果_list[i]>0,且_list[i]>t,整段变红(注意k的位置),t=0,然后继续
`var _list = [

    ["采样",-2],
    ["送检",null],
    ["签收",null],
    ["已登记",42],
    ["IOM",null],
    ["离心",null],
    ["去盖",46],
    ["测试中",1],
    ["已上传",962762],
    ["已发送",undefined]
]
var tableTwo = [
    ["采样",0],
    ["送检",10],
    ["签收",10],
    ["已登记",10],
    ["IOM",10],
    ["离心",10],
    ["去盖",10],
    ["测试中",10],
    ["已上传",10],
    ["已发送",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]);

`

谢邀

  1. 你需要稍微了解一下markdown语法,这样粘贴代码才不会出错,现在你贴出来的代码是有问题的,影响别人理解你的目的
  2. 你所谓的变红是一种状态,可以用另外一个数组来记录,或者直接扩展你的_list
  3. 此外你的数据结构其实意义不大,特别是对_list,再次标明哪些名称意义不是特别大,因为你已经是数组的,数组是有序的数据了。如果_list数据也是你自己生成的,建议进行优化,而且把数据标准化,比如没有undefined,只有整数数据和null这样一些状态,这样才好进行后续处理。

var Leng=10;
var redList=[0,0,0,0,0,0,0,0,0,0];//置红标志数组,值为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;
        }
    }
}

//后面根据redList数据处理显示

上述代码未经测试,你需要调试一下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题