如何在使用Css、Scss或TypeScript进行Map时选择不同数组长度的最后5个元素?

6za6bjd0  于 2023-02-13  发布在  TypeScript
关注(0)|答案(2)|浏览(117)

我有这个代码。这个数据数组的长度是根据数据的变化。我想根据每个数组的最后剩余元素的样式。长度% 5。但我找不到一个解决方案与css。

<div className={styles.container}>
      {data?.cast.map((movie) => {
        const mod = data.cast.length%5     
        return (
          <div
            key={movie.id}
            className={styles.container_card}
            style={{ "--n": mod } as React.CSSProperties}
          >
            <MovieCard
              credit={movie}
              categoryType={keys}
              genreId={movie.genre_ids[0]}
            />
          </div>
        );
      })}
    </div>
I am using Scss. I am trying to write a css like example below.

.container {
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  &_card {
    width: 20%;
    position: relative;
    &:hover:nth-last-child( array.length % 5  ) {
      transform: translateY(-200px);
    }
  }
}
5cg8jx4n

5cg8jx4n1#

要获得表示余数的最后n项,可以执行以下操作:

// assuming you have a data structure like this
const data = {
  cast: ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9', 'p10', 'p11', 'p12', 'p13', 'p15', 'p16', 'p17', 'p18', 'p19', 'p20']
};

// this will get you the last n-items that are the remainder items
const mapped = data.cast.map(movie => {
  const remainder = data.cast.length % 5;
  const lastItems = data.cast.slice(-remainder);
  console.log(lastItems); // prints: [ 'p17', 'p18', 'p19', 'p20' ]
});

那么,现在我们如何将其应用到CSS中的样式中呢?您可以向className添加一个类,也可以在React中使用style属性。
其思想是,只有当您正在迭代的项在剩余项的列表中时,才添加该类或样式。
下面是一个简单的例子,它看起来像什么。这是没有优化,但你得到的想法:

<div className={styles.container}>
      {data?.cast.map((movie) => {
        const remainder = data.cast.length % 5;
        const lastItems = data.cast.slice(-remainder);
        const remainderClass = lastItems.includes(movie) ? 'remainder-item' : '';
        return (
          <div
            key={movie.id}
            className={`${styles.container_card} ${remainderClass}`}
          >
            <MovieCard
              credit={movie}
              categoryType={keys}
              genreId={movie.genre_ids[0]}
            />
          </div>
        );
      })}
    </div>

lastItems在每次迭代中保持不变,因此您可以将其移到循环之外。另外,考虑使用clxclassnames npm包,它们对于切换类非常有用。

hof1towb

hof1towb2#

用户可以在此代码中使用slice。请查看以下代码以供参考:

<div className={styles.container}>
  {data?.cast.map((movie) => {
    const mod = data.cast.length % 5;     
    return (
      <div
        key={movie.id}
        className={styles.container_card}
        style={
          mod === 0
            ? {}
            : { "&:hover:nth-last-child(-n + " + mod + ")": { transform: "translateY(-200px)" } }
        }
      >
        <MovieCard
          credit={movie}
          categoryType={keys}
          genreId={movie.genre_ids[0]}
        />
      </div>
    );
  })}
</div>

不管data. cast的长度如何,上面的代码都将显示最后五个元素。
如果它不工作,请让我知道我一定会帮助。

快乐编码!!

相关问题