javascript - 如何同时映射3个或更多数组

标签 javascript arrays reactjs filter

同时映射 3 个或更多数组的最佳方法或最佳实践是什么?

对于这个例子:

首先,我按团队名称过滤数据,然后通过它们进行映射以显示它们

(在此示例中,我想使用 <div key={index} className={styles.member}> .... </div> 仅一次来减少编码,因为它们完全相同)

--您可以自由更改代码中的过滤器或映射方法--

function MyApp() {
  const managementTeam = members.filter((m) => m.team === "management");
  const developmentTeam = members.filter((m) => m.team === "development");
  const uxTeam = members.filter((m) => m.team === "UX");
  const contentTeam = members.filter((m) => m.team === "content");

  const development = developmentTeam.map((m, index) => (
    <div key={index} className={styles.member}>
      <figure>
        <img className="image-cover" src={m.image} alt={m.faName} />
      </figure>
      <div className={styles.info}>
        <h3>{m.faName}</h3>
        <div className={styles.titleWrapper}>
          <div
            className={styles.snackItem}
            style={{ backgroundColor: m.background }}>
            {m.position}
          </div>
        </div>
      </div>
    </div>
  ));

  const management = managementTeam.map((m, index) => (
    <div key={index} className={styles.member}>
      <figure>
        <img className="image-cover" src={m.image} alt={m.faName} />
      </figure>
      <div className={styles.info}>
        <h3>{m.faName}</h3>
        <div className={styles.titleWrapper}>
          <div
            className={styles.snackItem}
            style={{ backgroundColor: m.background }}>
            {m.position}
          </div>
        </div>
      </div>
    </div>
  ));

  const ux = uxTeam.map((m, index) => (
    <div key={index} className={styles.member}>
      <figure>
        <img className="image-cover" src={m.image} alt={m.faName} />
      </figure>
      <div className={styles.info}>
        <h3>{m.faName}</h3>
        <div className={styles.titleWrapper}>
          <div
            className={styles.snackItem}
            style={{ backgroundColor: m.background }}>
            {m.position}
          </div>
        </div>
      </div>
    </div>
  ));

  const content = contentTeam.map((m, index) => (
    <div key={index} className={styles.member}>
      <figure>
        <img className="image-cover" src={m.image} alt={m.faName} />
      </figure>
      <div className={styles.info}>
        <h3>{m.faName}</h3>
        <div className={styles.titleWrapper}>
          <div
            className={styles.snackItem}
            style={{ backgroundColor: m.background }}>
            {m.position}
          </div>
        </div>
      </div>
    </div>
  ));

  return (
    <div className={styles.wrapper}>
        <div className={styles.membersWrapper}>
          <div>{management}</div>
          <div>{development}</div>
          <div>{ux}</div>
          <div>{content}</div>
        </div>
    </div>
  );

最佳答案

其中很多答案都很好且清晰,但我不喜欢它们都在数组上使用多次迭代,而您可以使用reduce一次性完成所有操作。示例:

const Team = ({ image, faName, background, position }) => (
  <div className={styles.member}>
    <figure>
      <img className="image-cover" src={image} alt={faName} />
    </figure>
    <div className={styles.info}>
      <h3>{faName}</h3>
      <div className={styles.titleWrapper}>
        <div
          className={styles.snackItem}
          style={{ backgroundColor: background }}
        >
          {position}
        </div>
      </div>
    </div>
  </div>
);

export default function App() {
  const teams = members.reduce((acc, current, index) => {
    const team = current.team;
    const content = <Team key={index} {...current} />;

    if (team in acc) {
      acc[team].push(content);
    } else {
      acc[team] = [content];
    }
    return acc;
  }, {});

  console.log(teams);

  return (
    <div className={styles.wrapper}>
      <div className={styles.membersWrapper}>
        <div>{teams.management}</div>
        <div>{teams.development}</div>
        <div>{teams.ux}</div>
        <div>{teams.content}</div>
      </div>
    </div>
  );
}

如果您需要使每个团队都不同并且无法使用一个组件,那么您可以创建单独的组件并使用 switch 语句而不是 if (team in acc) 或者您可以使用 object 和键值对。

关于javascript - 如何同时映射3个或更多数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70504602/

相关文章:

javascript - 如何使用selenium rc查找页面中是否存在javascript错误

javascript - 从 flickr 集中选择随机图像并将其附加到 div

javascript - ReactJS:状态在每次更新时设置回初始值

javascript - 从 JSON 字符串值中删除双引号

javascript - 如何使用 ES6 HOF Javascript 在数组中查找重复对象(所有键值对应该相同)

c++ - C++中的"Free"数组元素

python - 使用 python reshape 数组

javascript - 如何使用 axios 发出编码的 POST 请求?

javascript - React-router isActive 方法不起作用

javascript - 如何动态创建关联数组