首页 > 解决方案 > 修改数组以阻止对象嵌套

问题描述

我有一个示例数组

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 不是函数' 对此的任何帮助将不胜感激。

标签: javascript

解决方案


在您的代码中,您尝试将 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);

推荐阅读