javascript - 修改数组以阻止对象嵌套
问题描述
我有一个示例数组
const array = [
{ obj: [{ fields: { title: 'titleValue1' } }, { fields: { title: 'titleValue2' } }] },
{ obj: [{ fields: { title: 'titleValue3' } }, { fields: { title: 'titleValue4' } }] },
]
我正在寻找将数组修改为:
const modifiedArray = [
{ obj: [{ title: 'titleValue1' }, { title: 'titleValue2' }] },
{ obj: [{ title: 'titleValue3' }, { title: 'titleValue4' }] },
]
因此,当我遍历修改后的数组时,我可以调用“obj.title”而不是“obj.fields.title”,我认为这可以使用.map 来实现。到目前为止,我已经尝试过:
const ammendedArray = array.map(item => ({ ...item, title: item.map(e => e.fields) }))
但返回 'item.map 不是函数' 对此的任何帮助将不胜感激。
解决方案
在您的代码中,您尝试将 map 用于顶级数组中的项目。第一项是这样的,
{ obj: [{ fields: { title: 'titleValue1' } }, { fields: { title: 'titleValue2' } }] }
如您所见item
,是一个对象。您不能通过对象进行映射。你可以做的是映射item.obj
const ammendedArray = array.map(item => ({ ...item, title: item.obj.map(e => e.fields) }))
但它不会解决你的问题,你会得到一个错误的对象数组,像这样,
[
{
obj: [{ fields: { title: 'titleValue1' } }, { fields: { title: 'titleValue2' } }],
title: [{ title: 'titleValue1' }, { title: 'titleValue2' }]
},
...
]
您将不得不更新obj
密钥。你需要做的是以下,
const array = [
{ obj: [{ fields: { title: 'titleValue1' } }, { fields: { title: 'titleValue2' } }] },
{ obj: [{ fields: { title: 'titleValue3' } }, { fields: { title: 'titleValue4' } }] },
]
const res = array.map((item) => {
return {
obj: item.obj.map(i => {
return i.fields
})
};
});
console.log(res);