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数组打印就可以看到重复数据整合 之后的都是我自己需求来整合的数据