保持嵌套数组结构相同,但附加属性



我有以下嵌套数组,我保留和保持不变,但也附加了一个名为indexes的属性到每个嵌套的items对象,它存储了一个自上而下的索引列表,这样我就可以跟踪嵌套的项目,当我扁平化数组并在我的应用程序的其他地方使用它。

[
{ 
cat: '1'
items: [
{
media: [
{
type: 'image'
}
]
},
{
media: [
{
type: 'image'
}
]
},
{
media: [
{
type: 'image'
}
]
}
]
},
{
cat: '2',
items: [
{
media: [
{
type: 'image'
},
{
type: 'image'
}
]
}
]
},
{
cat: '3',
items: [
{
media: [
{
type: 'image'
}
]
}
]
}
];

我希望它看起来像下面这样,其中indexes0开始的第一项,media数组中的每个出现附加一个递增的数字并将其绑定为属性。

[
{
cat: '1',
items: [
{
indexes: [0],
media: [
{
type: 'image'
}
]
},
{
indexes: [1],
media: [
{
type: 'image'
}
]
},
{
indexes: [2],
media: [
{
type: 'image'
}
]
}
]
},
{
cat: '2',
items: [
{
indexes: [3, 4],
media: [
{
type: 'image'
},
{
type: 'image'
}
]
}
]
},
{
cat: '3',
items: [
{
indexes: [5],
media: [
{
type: 'image'
}
]
}
]
}
];

最好的方法是什么?

在我看来,最优雅的方法是使用forEach循环遍历所有条目。

const cats = [{
cat: '1',
items: [{
media: [{
type: 'image'
}]
},
{
media: [{
type: 'image'
}]
},
{
media: [{
type: 'image'
}]
}
]
},
{
cat: '2',
items: [{
media: [{
type: 'image'
},
{
type: 'image'
}
]
}]
},
{
cat: '3',
items: [{
media: [{
type: 'image'
}]
}]
}
];
let totalIndex = 0
cats.forEach(cat => {
cat.items.forEach(item => {
item.indexes = item.media.map(() => totalIndex++)
})
})
console.log(cats)

最新更新