我有一個從客戶那里收到的obj,
我有一個從客戶那里收到的obj。
const record = {
"date": "2021-09-20",
"startAt":"10:00",
"endAt":"16:00"。
"employeeId": [5,2],<==
"projectId":[50,48], <==
"notes":"blahhh"。
}
我想把它轉換為一些物件,同樣的細節,但我想比如說 employeeId 5在兩個專案中作業,50和48 我想有兩個具有相同細節的物件,但employeeId是50,projectId是:第一個物件是50,第二個物件是48
。{
....
"employeeId"。[5],<== /first emplyee。
"projectId":[50],<== //第一個專案。
....
}
{
....
"employeeId": [5],/first emplyee。
"projectId":[48], // sec project
...
}
{
....
"employeeId"。[2],/sec employee。
"projectId":[50], //第一個專案。
....
}
{
....
"employeeId"。[2],/sec employee。
"projectId": [48], /sec project
....
}
感謝您對我的幫助
uj5u.com熱心網友回復:
你可以這樣做,例如:
const record = {
date: "2021-09-20",
startAt: "10:00",
endAt: "16:00",
employeeId: [5, 2] 。
projectId: [50, 48]。
notes: "blahhh"。
};
const records = record.employeeId.
.map((employeeId) =>/span>
record.projectId.map((projectId) =>({
...記錄。
employeeId: [employeeId],
projectId: [projectId].
}))
)
.flat()。
console.log(records);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
1-提取所有有陣列值的鍵
let arrayKeys = Object.entries(record)。 filter(([key, value]) => typeof value === 'object' && Array. isArray(value))
2- 用默認的鍵來創建你的默認物件:
。let defaultObj = Object. entries(record).reduce((obj, [key, value]/span>) => {
if(!typeof value === 'object' || !Array.isArray(value) ) {
obj[key] = value
}
return obj;
}, {})
3- 創建一個函式,用你的最終物件遞回地填充一個陣列:
function addKeys(array, obj, keys) {
if(!keys.length) {
array.push(obj)。
return;
}
let [key, values] = keys.pop()。
values.forEach(val => {
obj[key] = [val];
addKeys(array, {...obj}, [...key])
});
}
完整代碼:
。const record = {
"date": "2021-09-20",
"startAt":"10:00"。
"endAt":"16:00"。
"employeeId": [5,2] 。
"projectId":[50,48, 60, 70] 。
"notes":"blahhh"。
"extraArrayKey": ['a'/span>, 'b'/span>]
}
let arrayKeys = Object.entries(record)。 filter(([key, value]) => typeof value === 'object' && Array. isArray(value))
let defaultObj = Object.entries(record)。 reduce((obj, [key, value]) => {
if(!typeof value === 'object' || !Array.isArray(value) ) {
obj[key] = value
}
return obj;
}, {})
function addKeys(array, obj, keys) {
if(!keys.length) {
array.push(obj)。
return;
}
let [key, values] = keys.pop()。
values.forEach(val => {
obj[key] = [val];
addKeys(array, {...obj}, [...key])
});
}
let output = [];
addKeys(output, defaultObj, arrayKeys)
console.log(output)
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329115.html
標籤:
上一篇:在Angular中渲染物件的物件
