我想重新格式化現有陣列,我該如何使用 Javascript 或 typescript 進行格式化
第一個陣列
pdfData: [
{
Id: 1,
path:'https//path/pdf1'
},
{
Id: 1,
path:'https//path/pdf2'
},
{
Id: 2,
path:'https//path/pdf1'
},
{
Id: 2,
path:'https//path/pdf2'
},
]
我想將此陣列轉換為以下陣列
data: [
{
Id: 1,
links:['https//path/pdf1','https//path/pdf2']
},
{
Id: 2,
links:['https//path/pdf1','https//path/pdf2']
},
]
uj5u.com熱心網友回復:
您問的是 Typescript 或 Javascript - 這是 Typescript 版本:
// Typescript version
const pdfData = [
{
Id: 1,
path:'https//path/pdf1'
},
{
Id: 1,
path:'https//path/pdf2'
},
{
Id: 2,
path:'https//path/pdf1'
},
{
Id: 2,
path:'https//path/pdf2'
},
]
interface TransformedDataItem {
Id: number,
links: string[]
}
const result = [] as TransformedDataItem[];
for (const item of pdfData) {
const existing = result.find(it => it.Id === item.Id);
if (existing) {
existing.links.push(item.path)
} else {
result.push({
Id: item.Id,
links: [item.path]
})
}
}
uj5u.com熱心網友回復:
這應該這樣做:
const pdfData = [
{
Id: 1,
path: 'https//path/pdf1'
},
{
Id: 1,
path: 'https//path/pdf2'
},
{
Id: 2,
path: 'https//path/pdf1'
},
{
Id: 2,
path: 'https//path/pdf2'
},
]
const result = [];
for (const item of pdfData) {
const existing = result.find(it => it.Id === item.Id);
if (existing) {
existing.links.push(item.path)
} else {
result.push({
Id: item.Id,
links: [item.path]
})
}
}
uj5u.com熱心網友回復:
另一種,一種ES6風格的解決方案
const data = [{Id: 1, path:'https//path/pdf1'},{ Id: 1, path:'https//path/pdf2'},{ Id: 2, path:'https//path/pdf1'},{ Id: 2, path:'https//path/pdf2'}];
const result = Object.values(data.reduce((acc, { Id, path }) => ({
...acc,
[Id]: acc[Id]
? { ...acc[Id], links: [...acc[Id].links, path] }
: { Id, links: [path] },
}), {}));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397332.html
標籤:javascript 数组 打字稿
下一篇:過濾/匯總物件中的數字串列
