js 将数组中某个字段相同的合并为一组

901 阅读1分钟
data() {
      return {
        beforeData: [ //之前的数据
          {
            start: '2021-05-24',
            a: 1,
            end: '2021-05-25'
          },
          {
            start: '2021-05-24',
            a: 2,
            end: '2021-05-25'
          },
          {
            start: '2021-05-25',
            a: 3,
            end: '2021-05-26'
          },
          {
            start: '2021-05-25',
            a: 4,
            end: '2021-05-26'
          },
          {
            start: '2021-05-26',
            a: 5,
            end: '2021-05-27'
          },
          {
            start: '2021-05-28',
            a: 6,
            end: '2021-05-29'
          }
        ],
        afterData: [],//之后的数据
       
      }
    },
    //=================================================================
    change() {
        let tempArr = [];
        const {beforeData, afterData} = this
        for (let i = 0; i < beforeData.length; i++) {
          beforeData[i].str = beforeData[i].start + ',' + beforeData[i].end
          if (tempArr.indexOf(beforeData[i].str) === -1) {
            afterData.push({
              str: beforeData[i].str,
              origin: [beforeData[i]]
            });
            tempArr.push(beforeData[i].str);
          } else {
            for (let j = 0; j < afterData.length; j++) {
              if (afterData[j].str == beforeData[i].str) {
                afterData[j].origin.push(beforeData[i]);
                break;
              }
            }
          }
        }
        afterData.forEach(item => {
          delete item.str
          item.origin.forEach(oItem => {
            delete oItem.str
          })
        })
        console.log(this.beforeData,'beforeData');
        console.log(afterData,'afterData');

      },
    //==========结果=======================================================
    
![截屏2021-05-26 上午10.05.05.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bb20f9d6ef384338a1dd802efaccb052~tplv-k3u1fbpfcp-watermark.image)