数组对象根据相识值和属性相同 双条件下 进行分组合并

新手上路,请多包涵
 var list = [
       { id: 1, name: '小明', type: '分类', y: 10, page:1 },
       { id: 2, name: '大明', type: '分钱', y: 15, page:1 },
       { id: 3, name: '中明', type: '分兵', y: 20, page:1 },
       { id: 4, name: '小明', type: '分分', y: 30, page:1 },
       { id: 5, name: '雷明', type: '分兵', y: 40, page:2 },
       { id: 6, name: '小明', type: '分兵', y: 90, page:2 },
       { id: 7, name: '出明', type: '分钱', y: 150, page:3 },
       { id: 8, name: '中明', type: '分钱', y: 160, page:4 },
       { id: 9, name: '出明', type: '分分钱', y: 400, page:1},
       { id: 10, name: '雷明', type: '分分钱', y: 500, page:1},
   ];

我想根据对象的 y值的相近 的值进行分组。
比如 第一个Y和第二个Y相差20 之内 就合并成一组,第三个Y和第一个Y相差20之内 也一起成一组。还有一个条件就是在page相同的情况下进行 Y值相差 合并成一组,具体 看newlist 数据信息;
Y值 10 15 20 30 是一组,150和160 则不属于,其他的照旧!

想要得到的数据

 var newList = [
               [
                    { id: 1, name: '小明', type: '分类', y: 10, size:1 },
                    { id: 2, name: '大明', type: '分钱', y: 10, size:1 },
                    { id: 3, name: '中明', type: '分兵', y: 20, size:1 },
                    { id: 4, name: '小明', type: '分分', y: 30, size:1 },
                ],
                [{ id: 5, name: '雷明', type: '分兵', y: 40, size:2 },],
                [{ id: 6, name: '小明', type: '分类', y: 90, size:2 },],
                [{ id: 7, name: '小明', type: '分类', y: 150, size:3},],
                [{ id: 8, name: '大明', type: '分钱', y: 160, size:4}],
                [{ id: 9, name: '小明', type: '分类', y: 400, size:1 }],
                [{ id: 10, name: '小明', type: '分类', y: 500, size:1 }],
             ]
   
阅读 1.2k
1 个回答

刚好昨天刚答了类似的,直接复用

 var list = [
       { id: 1, name: '小明', type: '分类', y: 10, page:1 },
       { id: 2, name: '大明', type: '分钱', y: 15, page:1 },
       { id: 3, name: '中明', type: '分兵', y: 20, page:1 },
       { id: 4, name: '小明', type: '分分', y: 30, page:1 },
       { id: 5, name: '雷明', type: '分兵', y: 40, page:2 },
       { id: 6, name: '小明', type: '分兵', y: 90, page:2 },
       { id: 7, name: '出明', type: '分钱', y: 150, page:3 },
       { id: 8, name: '中明', type: '分钱', y: 160, page:4 },
       { id: 9, name: '出明', type: '分分钱', y: 400, page:1},
       { id: 10, name: '雷明', type: '分分钱', y: 500, page:1},
   ];
list.reduce((res, v) => {
    var len = res.length;
    if(len && Math.abs(v.y - res[len-1][0].y)<=20 && v.page == res[len-1][0].page) res[len-1].push(v);
    else (res[len] ||= []).push(v)
    return res;
}, [])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题