使用 .map() 迭代对象值数组并重新分配给新键

dea*_*t88 0 javascript reactjs

我正在尝试将以下数据转换为:

{
      title: 'The Promise',
      blurb: 'Lorem Ipsum',
      cover_image: 'Lorem Ipsum',
      pub_year: 2002,
      genre: 'Foobar'
    }
Run Code Online (Sandbox Code Playgroud)

到:

[
 {
   col1: 'The Promise',
   col2: 'Lorem Ipsum',
   col3: 'Lorem Ipsum',
   col4: 2002
   col5: 'Foobar'
 },
]
Run Code Online (Sandbox Code Playgroud)

我已经对此困惑了很长一段时间,只能让它看起来像这样,这只是单独的对象,而不是作为对象数组一部分的单个对象(从我的数据库返回的 JSON 中还有其他书籍对象)该函数需要进行迭代)

{col1: 1} //this is an id
{col2: 'The Promise'}
{col3: 'Lorem ipsum'}
{col4: Lorem Ipsum}
{col5: '2002'}
{col6: Foobar}
Run Code Online (Sandbox Code Playgroud)

这是我一直在研究的代码:

 const data = React.useMemo(
    () =>
      props.tableData.map((object, i) => {
        Object.values(object).map((value, i) => {
          let col = `col${i + 1}`
          const obj = { [col]: value }
        })
      }),
    [props.tableData]
  )
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 5

映射值时,不要构造包含单个属性的对象,而是返回一个条目对(一个数组,其中第一个值是属性,第二个值是关联值),以便您可以将条目数组转换为对象与Object.fromEntries.

const data = React.useMemo(
    () =>
        props.tableData.map((object) => (
            Object.fromEntries(
                Object.values(object).map((value, i) => [`col${i + 1}`, value])
            )
        )),
    [props.tableData]
);
Run Code Online (Sandbox Code Playgroud)

这取决于所订购的输入对象中的属性。虽然这通常1是可靠的,但它并不是一个值得依赖的好东西,并且如果任何属性变成数字(例如或) ,它就不起作用5。考虑是否可以将输入对象属性格式化为(有序)数组。