js数组里面的重复对象的去重,合并不同的属性的处理方法

重复数组的过滤去重,并且合并不同的属性,比较抽象!具体的看下面的数据格式

var arr = [
        {
          data: [
            { xh: '1', name: '张三', value: '1360', postion: [{ d: '上海' }] },
            { xh: '2', name: '李四', value: '1120', postion: [{ d: '广州' }] }
          ]
        },
        {
          data: [
            { xh: '3', name: '李白', value: '1360', postion: [{ d: '北京' }] },
            { xh: '3', name: '李白', value: '1360', postion: [{ d: '重庆' }] },
            { xh: '3', name: '李白', value: '1360', postion: [{ d: '香港' }] }
          ]
        },
        {
          data: [
            { xh: '4', name: '陆游', value: '1360', postion: [{ d: '苏州' }] },
            { xh: '5', name: '李申', value: '1120', postion: [{ d: '杭州' }] }
          ]
        }
      ]
    },

期望的结果是:

var arr = [
        {
          data: [
            { xh: '1', name: '张三', value: '1360', postion: [{ d: '上海' }] },
            { xh: '2', name: '李四', value: '1120', postion: [{ d: '广州' }] }
          ]
        },
        {
          data: [
            { xh: '3', name: '李白', value: '1360', postion: [{ d: '北京' },{ d: '重庆' },{ d: '香港' }] },
          ]
        },
        {
          data: [
            { xh: '4', name: '陆游', value: '1360', postion: [{ d: '苏州' }] },
            { xh: '5', name: '李申', value: '1120', postion: [{ d: '杭州' }] }
          ]
        }
      ]
    },

实现(暴力破解)的方法如下

arr.forEach(item => {
        let beforeData = item.data
        let afterData = []
        let templateArr = []

        for (let i = 0; i < beforeData.length; i++) {
          if (!templateArr.includes(beforeData[i].xh)) {
            afterData.push({
              xh: beforeData[i].xh,
              name: beforeData[i].name,
              value: beforeData[i].value,
              position: [beforeData[i].position && beforeData[i].position[0]]
            })
            templateArr.push(beforeData[i].xh)
          } else {
            for (var j = 0; j < afterData.length; j++) {
              if (afterData[j].xh == beforeData[i].xh) {
                afterData[j].position.push(beforeData[i].position[0])
                break
              }
            }
          }
        }
        item.data = afterData
      })
      console.info(arr, 'arrarrarrarrarr')

在这里插入图片描述

这样就实现了我们想要的结果!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值