[英]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
。 每個人都有來自項目本身的相同employeeId
和taskId
。
創建一個函數,該函數將返回給定項和分配的輸出項:
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.