JS合并數組對象中重復數據

假如有這樣一組數據

var oldData=[
   {date:'2019-08-26',"queue_id":219,"queue_num":4,"queue_status":1,"queue_name":'預約接種'},
   {date:'2019-08-26',"queue_id":218,"queue_num":2,"queue_status":1,"queue_name":'預約接種'},
   {date:'2019-08-25',"queue_id":217,"queue_num":1,"queue_status":1,"queue_name":'預約接種'}
]      

我想把擁有相同日期的數據,放在一個數組里面,

第一種方案

1、首先我們把源數據先變成目標數據的規則

var oldDataRule = []
oldData.forEach(el => {
  var oldObj = {
    date: el.date,
    list:[]
  }
  oldObj.list.push(el)
  oldDataRule.push(oldObj)
})
console.log(oldDataRule)

打印出來的數據如下

20190830141919.png

2、然后我們把源數據去重,把相同日期的數據合并成list

            var newData = []
            var newObj = {}
            oldDataRule.forEach((el, i) => {
              if (!newObj[el.date]) {
                newData.push(el);
                newObj[el.date] = true;
              } else {
                newData.forEach(el => {
                  if (el.date === oldDataRule[i].date) {
                    el.list = el.list.concat(oldDataRule[i].list);
                    // el.list = [...el.list, ...oldDataRule[i].list]; // es6語法
                  }
                })
              }
            })
            console.log(newData)

最后出來的結構如下

QQ截圖20190830150433.png

第二種方案

var oldDataRule = []
var newData = []
oldData.forEach( item =>{
  oldDataRule [item.date] = oldDataRule [item.date] || [];
  oldDataRule [item.date].push(item);
})
for (let key in oldDataRule ) {
  let obj = {}
  obj.date = key
  obj.list =arr[key]
  newData.push(obj)
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,135評論 6 13
  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,136評論 1 32
  • 九月,相約大一。 大學在我眼中是一個自由而又充滿趣味的地方。曾經我對它的一切都很感興趣,終于,開學第一件事隨著時間...
    習于于冷閱讀 683評論 0 0
  • 球員管理系統: 類一 球員類:成員變量(球員信息)-姓名,性別,ID,位置,工資,年齡 類二 球隊類:需要使用球...
    在努力中閱讀 165評論 0 0
  • 昨晚決定睡前把手機放客廳不帶回房間,然后決定從2點睡覺開始慢慢把時間前移。舍友說這樣吧我睡覺的時候把你手機帶走,你...
    招財小能手閱讀 95評論 0 0