簡體   English   中英

object 數據組和數組 javascript

[英]group and array of object data javascript

所以我有一個來自 mongodb 查詢的 object 數組,如下所示,它包含來自 $agg 的值:

[
  {
    "_id": "17000691",
    "latestAnswer": [
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Foreman",
        "department": "Production",
        "username": "17000691"
      }
    ]
  },
  {
    "_id": "MT220047",
    "latestAnswer": [
      {
        "title": "Test",
        "date": "2022-11-15",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Untitled Form1",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      }
    ]
  }
]

有沒有一種方法可以根據日期、標題和用戶名對數據庫進行分組?

[
  {
    "username": "MT220047",
    "title": "Test",
    "position": "Management Trainee",
    "department": "Logistic",
    "2022-11-15": 1,
    "2022-11-16": 2
  },
  {
    "username": MT220047,
    "title": UntitledForm1,
    "position": "Management Trainee",
    "department": "Logistic",
    "2022-11-16": 1
  },
  {
    "username": 17000691,
    "title": Test,
    "position": "Foreman",
    "department": "Production",
    "2022-11-16": 1,
    
  }
]

對此的任何幫助都會對我有用...謝謝..,它嘗試對其進行映射,但似乎對按照我的意願對其進行分組的邏輯感到困惑

這樣的事情可以工作嗎?

const payload = [
  {
    "_id": "17000691",
    "latestAnswer": [
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Foreman",
        "department": "Production",
        "username": "17000691"
      }
    ]
  },
  {
    "_id": "MT220047",
    "latestAnswer": [
      {
        "title": "Test",
        "date": "2022-11-15",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Test",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      },
      {
        "title": "Untitled Form1",
        "date": "2022-11-16",
        "position": "Management Trainee",
        "department": "Logistic",
        "username": "MT220047"
      }
    ]
  }
]

const accumulator = {};
const final = []
const res = payload
.map((payload) => payload.latestAnswer)
.reduce((acc, curr) => { acc.push(...curr); return acc}, []);
res.forEach((item) => {
  const {username, title, position, department, date} = item
  const key = `${username}-${department}-${position}-${title}`
  accumulator[key] =  accumulator[key] || {};
  accumulator[key][date] = accumulator[key][date] + 1 || 1
})

Object.keys(accumulator).forEach((item) => {
  const [username, department, position, title] = item.split('-')
  final.push({
    username, 
    department, 
    position, 
    title,
    ...accumulator[item]
  })
})

當然可以改進,但你應該得到算法的精神。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM