Js数组对比

      最近做了一个功能,结算对比表,要求的是历史版本与现在的版本进行对比,如果在新版本数据变更要标红,新版本新加的数据老数据要空出来,同理老数据原本存在新数据删除的也要空出来

     思路:既然是双向对象肯定不能拿两个数据进行来回比较,容易出差错也比较麻烦不灵活,这时候应该定义一个新的数组,把两个数组拼成一个并进行排重,用这俩数组和新的这个进行比对;

   var dataArr = []
dataArr = Src//随便新老数据中的一个就行
             
                var arr = [];    //定义一个临时数组 
                var arr2 = [];
                    for (var i = 0; i < dataArr.length; i++) {    //循环遍历当前数组  
                        //判断当前数组下标为i的元素是否已经保存到临时数组  
                        //如果已保存,则跳过,否则将此元素保存到临时数组中
//根据关键字段进行判断,因为要想两个tab每条数据在一行上进行对比就需要一个字段进行排序,可以理解为序号,序号相同则在一行,不同在两行,相同序号进行行内对比,不同序号则不同的那个直接空出一行就可以了
                        if (i > 0) {
                            if (arr.indexOf(dataArr[i].FabricCode) == -1) {
                                arr2.push(dataArr[i]);
                                arr.push(dataArr[i].FabricCode);
                            }
                            continue;
                        }
                        arr.push(dataArr[i].FabricCode);
                        arr2.push(dataArr[i]);
                        
                    }
                    dataArr = arr2

这时候得出一个排重后的数组dataArr

    //传入的数组当前的src或des,index对比的关键字段,code是公共数组出入的对比值
    function select(data, index, code) {
        for (var g = 0; g < data.length; g++) {//数据填充
            var curcode = data[g][index];
            if (curcode == code) {
                return data[g];
            }
        }
        return {};
    }

写了一个方法需要传三个参数,第一个就是历史数据的数组或者新数组的数组,第二个是关键字段图三有讲解这个字段的用处,第三个是这个字段的值图三也有讲解,如歌字段值相同则有这条数据直接输出,没有的话则输出孔对象就行,就例如:

var newArr=[1,2,3,4]//排重的数组
var arr1=[1,2]//老数据
var arr2=[1,3,4]//新数据

可以看得出来老数据没有新数据的3和4,新数据没有老数据的2,这个时候用完方法得出的结果如下

var arr1=[1,2,{},{}]//老数据
var arr2=[1,{},3,4]//新数据

现在数据就显示在一行上面了,这时候根据相同字段不同值进行比对就简单了

  for (var t = 0; t < dataArr.length; t++) {
                        var dataCode = dataArr[t][tabSort[f][Childkey]]
                        Src.push(select(Src[Childkey], tabSort[f][Childkey], dataCode));

                       Des.push(select(Des[Childkey], tabSort[f][Childkey], dataCode));
                    }

用的时候遍历新的数组,让新老数据分别和它比对就行了

猜你喜欢

转载自blog.csdn.net/weixin_41916005/article/details/83270117
今日推荐