【问题标题】:React js Map in nested array without key names在没有键名的嵌套数组中反应 js Map
【发布时间】:2019-11-05 18:59:46
【问题描述】:

我有这样的json数组

EMAIL: (3) ["john@example.com", "harry@example.com", "howard@example.com"]
FIRSTNAME: (3) ["John", "Harry", "Howard"]
LASTNAME: (3) ["Smith", "Pierce", "Paige"]
SMS: (3) ["33123456789", "33111222222", "33777888898"]

我正在尝试创建这样的表

然后是一组 firstName , LastName 等

在 render() 中我尝试过

{columnMapRows.EMAIL.map(row => (
    <TableRow >
    <TableCell align="center">{row}</TableCell>
    </TableRow>
    ))}

但我不想使用列名进行映射,我正在寻找通用解决方案。 email , firstname , lastname 是动态的,来自 csv 文件,可以随时更改

我也尝试过 foreach 和简单的数组循环。但它不起作用 请推荐

【问题讨论】:

  • 您是否在使用任何特定的 UI 库?
  • @Neeraj Verma 您需要什么输出?
  • 每个 EMAIL 获得的内容是什么????

标签: arrays reactjs render


【解决方案1】:

您应该使用地图函数中的索引来访问其他数据。

{columnMapRows.EMAIL.map((email, i) => (    
    <TableRow key={email}>
     <TableCell align="center">{email}</TableCell>
     <TableCell align="center">{columnMapRows.FIRSTNAME[i]}</TableCell>
     <TableCell align="center">{columnMapRows.LASTNAME[i]}</TableCell>
     <TableCell align="center">{columnMapRows.SMS[i]}</TableCell>
    </TableRow>
))}
// this assumes that all the array are the same length which seems to be the case

编辑:假设电子邮件始终存在的动态解决方案

{columnMapRows.EMAIL.map((email, i) => (    
    <TableRow key={email}>
     {Object.keys(columnMapRows).map((key) => (
        <TableCell align="center" key={key} >{columnMapRows[key][i]} </TableCell>
     ))}
    </TableRow>
))}

编辑:具有数据重构的动态解决方案

const keys = Object.keys(columnMapRows);
const items = columnMapRows[keys[0]].map(() => ({}));
keys.forEach((key) => {
  columnMapRows[key].forEach((data, i) => {
     items[i][key] = data;
  });
});

{items.map((item) => (    
    <TableRow>
      {Object.keys(item).map((key) => (
         <TableCell key={key}>{item[key]}</TableCell>
      ))}
    </TableRow>
))}

这当然可以改进,但我认为它显示了主要思想。我决定构造一个对象数组,因为我认为它更容易理解。然后使用Object.keys 迭代这些对象属性。

【讨论】:

  • email , firstname , lastname 是动态的,来自csv文件,可以随时更改
  • 你的意思是你可以有例如电话而不是短信或一些没有姓氏的数据?
  • 是的,而不是 lastname ,它们可以是另一列,例如 phone
  • 错了,为什么 firstname , lastname 会出现在 email 里?
  • in columnMapRows.EMAIL.map ... EMAIL 想动态来
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多