• 欢迎光临~

把数组相同的数据整合成一组数据 自己记录一下

开发技术 开发技术 2022-08-23 次浏览
checkSameData: function (data) {
      var list = [];
      var indices = [];//数组中每一个值是一个数组,数组中的每一个元素是原数组中相同order_group_id的下标
      var cache = {};//存储的是键是order_group_id 的值,值是order_group_id 在indeces中数组的下标
      for (var k = 0; k < data.length; k++) {
         if (data[k].order_group_id == null ||data[k].order_group_id == '' ) {
            data[k].order_group_id = k;//如果没有数据就随便给个唯一值
         }
         var order_group_id = data[k].order_group_id;
         var _index = cache[order_group_id];
         if (_index !== undefined) {
            indices[_index].push(data[k]);//这里是重复数据添加在同一个数组下标里面是个二维数组 eg:[0:[{...}],1:[{...},{...},{...}]] 下标1里面三个数据都是重复的,顺序是不会改变的
         } else {
            cache[order_group_id] = indices.length;//对象里面没有数据,把数组下标写进对象当键值
            indices.push([data[k]]);//把整条数据添加进去
         }
      }
      for (var a = 0; a < indices.length; a++) {
         for (var b = 0; b < indices[a].length; b++) {
            var num = indices[a].length - 1;
            //有一样的就把order_group_id分成一组
            if (indices[a].length > 1) {
               switch (b) {
                  case 0:
                     indices[a][b].order_group_id = '[';
                     break
                  case num:
                     indices[a][b].order_group_id = ']';
                     break
                  default:
                     indices[a][b].order_group_id = '|';
                     break
               }
            } else {//没有直接清空
               indices[a][b].order_group_id = '';
            }
         }
      }
      //把indices里面整合好的数据eg:[0:[{...}],1:[{...},{...},{...}]] 全部取出来整合成一维数组
      for (var i = 0; i < indices.length; i++) {
         for (var j = 0; j < indices[i].length; j++) {
            list.push(indices[i][j]);
         }
      }
      return list.length ? list : data
   },
重复数据在第一个for循环取indices数组打印就可以看到重复数据整合 之后的都是我自己需求来整合的数据
程序员灯塔
转载请注明原文链接:把数组相同的数据整合成一组数据 自己记录一下
喜欢 (0)