如何将每个10行数据的列表划分,然后将下一个数据设置为React JS中的右列?

发布于 2025-01-24 13:41:10 字数 1644 浏览 0 评论 0 原文

我正在使用使用效率函数中获取待办事项列表数组数据,现在我想显示每列10个数据的结果,在一列中显示10个数据后,下一个数据将设置为右列。

例如 : 我有22个标题。第一个1-10个标题将在第一列中显示,然后将在第二列中显示11-20个标题,而21-30标题将显示在其他列中。

arr = [1,2,3,4,5,6,7,8,9,10,112,13,13,14,15,16,17,18,19,20,20,21,22,23]

i实际想要此输出。 在这里输入图像描述

这是我的fethed数据,我试图显示这样的数据。但是我无法显示每列10DATA:

import React, { useEffect, useState } from 'react';


const Home = () => {

const [collection, setCollection] = useState([]);

useEffect(() => {
    fetch('https://jsonplaceholder.typicode.com/todos')
        .then(response => response.json())
        .then(json => {
            setCollection(json);
            // console.log(json)
        })
}, []);

let modified_collection = [];
if (collection.length > 0) {
    modified_collection = collection.reduce((rows, key, index) => {
        return ((index % 11 !== 10
            ? rows.push([key])
            : rows[rows.length - 1].push(key))
            && rows);
    }, []);
}

console.log(modified_collection);

return (
    <div  >
        {modified_collection.map((row, index) => (
            <div key={index} className='row mt-3'>
                {row.map((col, index) => (
                    <div key={index} className="col">
                        <div className='card ' >
                            <p> {col.title}</p>
                        </div>
                    </div>
                ))}
            </div>
        ))}
    </div>
)
}


export default Home

I am fetching to-do list array data in a useEffect function and now I want to show the results 10 data per column and after showing 10 data in one column the next data will set to the right column.

for example :
I have 22 titles. First 1-10 titles will show in first column then 11-20 titles will show in second column and 21-30 title will show in other column.

arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]

i actually want this output.
enter image description here

here, is my fethed data and I have tried to show like this. but I can't show 10data per column:

import React, { useEffect, useState } from 'react';


const Home = () => {

const [collection, setCollection] = useState([]);

useEffect(() => {
    fetch('https://jsonplaceholder.typicode.com/todos')
        .then(response => response.json())
        .then(json => {
            setCollection(json);
            // console.log(json)
        })
}, []);

let modified_collection = [];
if (collection.length > 0) {
    modified_collection = collection.reduce((rows, key, index) => {
        return ((index % 11 !== 10
            ? rows.push([key])
            : rows[rows.length - 1].push(key))
            && rows);
    }, []);
}

console.log(modified_collection);

return (
    <div  >
        {modified_collection.map((row, index) => (
            <div key={index} className='row mt-3'>
                {row.map((col, index) => (
                    <div key={index} className="col">
                        <div className='card ' >
                            <p> {col.title}</p>
                        </div>
                    </div>
                ))}
            </div>
        ))}
    </div>
)
}


export default Home

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯下孤影 2025-01-31 13:41:10

我创建了一个使用适当CSS的简单示例,以证明您的html

问题是分裂您的数组。

在沙盒中尝试一下,

if (collection.length > 0) {
let numberOfColumns = collection.length / 10;

if (collection.length % 10 > 0) {
  numberOfColumns++;
}

let index = 0;
for (let i = 0; i < collection.length; i++) {
  if (index % numberOfColumns == 0) {
    index = 0;
  }

  if (!modified_collection[index]) {
    modified_collection[index] = [];
  }

  modified_collection[index].push(collection[i]);
  index++;
}
}

您可以看到它的正确分配

沙盒

I created a simple example with appropriate css in order to demonstrate your html

the problem is the splitting of your array.

try this

if (collection.length > 0) {
let numberOfColumns = collection.length / 10;

if (collection.length % 10 > 0) {
  numberOfColumns++;
}

let index = 0;
for (let i = 0; i < collection.length; i++) {
  if (index % numberOfColumns == 0) {
    index = 0;
  }

  if (!modified_collection[index]) {
    modified_collection[index] = [];
  }

  modified_collection[index].push(collection[i]);
  index++;
}
}

In the sandbox you can see that it is split correctly

sandbox

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文