簡體   English   中英

Lodash flatMap用於展平對象

[英]Lodash flatMap to flatten object

我有以下對象:

const arr = [{
 "@id": "6005752",
 employeeId: {
  id: "22826"
},
allocationIntervals: {
 jobTaskTimeAllocationInterval: {
  "@id": "34430743",
   startTime: "2017-03-15T01:50:00.000Z",
   endTime: "2017-03-15T02:50:00.000Z"
 },
   "@id": "34430756",
   startTime: "2017-04-16T02:50:00.000Z",
   endTime: "2017-04-16T03:50:00.000Z"
},
taskId: {
 id: "16465169"
}
}];

我試圖從allocationIntervals.jobTaskTimeAllocationInterval中提取所有開始和結束時間,以創建如下所示的內容:

const arr = [{
  employeeId: "22826",
  taskId: "16465169"
  startTime: "2017-03-15T01:50:00.000Z",
  endTime: "2017-03-15T02:50:00.000Z"
  },
  {
  employeeId: "22826",
  taskId: "16465169",
  startTime: "2017-04-16T02:50:00.000Z",
  endTime: "2017-04-16T03:50:00.000Z"   
}];

我正在尋找使用Lodash flatMap執行此操作,具有以下功能:

const result = _.flatMap(arr, item => {
  return _.map(item.allocationIntervals, allocation => _.defaults({ start: item.jobTaskTimeAllocationInterval.startTime }, allocation));
});

有誰知道解決上述問題的方法?

看起來對於arr每個項目,您需要輸出數組中的2個元素; 一個用於allocationIntervals ,另一個用於allocationIntervals.jobTaskTimeAllocationInterval 每個人都有來自項目本身的相同employeeIdtaskId

創建一個函數,該函數將返回給定項和分配的輸出項:

const createAllocation = (item, allocation) => ({
    employeeId: item.employeeId.id, 
    taskId: item.taskId.id, 
    startTime: allocation.startTime, 
    endTime: allocation.endTime
});

調用此函數兩次傳遞每個項目allocationIntervals的第一個呼叫, allocationIntervals.jobTaskTimeAllocationInterval第二個電話:

const result = _.flatMap(arr, item => [
    createAllocation(item, item.allocationIntervals), 
    createAllocation(item, item.allocationIntervals.jobTaskTimeAllocationInterval)
]);

暫無
暫無

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

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