像這樣的物件中有多個欄位。
{
"image-processing": {
"type": "lib",
"data": {
"files": [
{
"file": "libs/photography/processing/.babelrc",
"hash": "62d50f586b2880f9d58ca4e9a84914c6a0d4936d"
},
{
"file": "libs/photography/processing/src/lib/processing.ts",
"hash": "a285d3554f264cc60f35bef6180298badb0478d1",
"deps": [
"npm:gm",
"npm:mongodb"
]
}
]
}
},
"image-processing-2": {
"type": "lib",
"data": {
"files": [
{
"file": "libs/photography/processing/.babelrc",
"hash": "62d50f586b2880f9d58ca4e9a84914c6a0d4936d",
"deps": [
"npm:gm",
"npm:faker"
]
},
{
"file": "libs/photography/processing/src/lib/processing.ts",
"hash": "a285d3554f264cc60f35bef6180298badb0478d1",
"deps": [
"npm:gm",
"npm:mongodb"
]
}
]
}
}
}
我只需要data.files.deps作為鍵的值物件的型別和內容。如您所見,每個檔案都有一個可選的 deps 陣列。所有的 deps 值都應該合并。
所以結果應該是:
{
"image-processing": { type: "lib", packages: [ "npm:gm", "npm:mongodb" ] },
"image-processing-2": { type: "lib", packages: [ "npm:faker", "npm:gm", "npm:mongodb" ] }
}
我嘗試遍歷該物件,但這會覆寫該值,而不是向該值添加新的包名稱:
const result = {}
Object.entries(data).map(([key, value]) => {
result[key].type = value.type
result[key].packages = value?.data?.files.map(d => d.deps)
})
uj5u.com熱心網友回復:
使用flatMap而不是map這樣你就有一個扁平的依賴字串陣列 - 并與空陣列交替使用,這樣未定義的.deps屬性就不會引起問題。
const data={"image-processing":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d"},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}},"image-processing-2":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d",deps:["npm:gm","npm:faker"]},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}}};
const output = Object.fromEntries(
Object.entries(data).map(([key, value]) => [
key,
{
type: 'lib',
packages: [...new Set(value.data.files.flatMap(file => file.deps ?? []))]
}
])
);
console.log(output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463418.html
標籤:javascript
