์ฌ๊ฑด์ ๊ฒฝ์๋ ์ด๋ฌํ๋ค..
๊ฒ์์ด๋ฅผ ์ ๋ ฅํ์ ๋ ๊ฒ์๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฅ ํฐ ์๋ถํฐ ๊ฑฐ๊พธ๋ก ๋ณด์ด๊ฒ ํด์ผํ๋ค.
๊ทธ๋ฌ๋๊น ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ 87 ๊ฑด์ด๋ผ๋ฉด ์ฒซ๋ฒ์งธ๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐ์ดํฐ์ ๋ฒํธ๋ 87, 86, 85 ... ์ด๋ฐ์์ผ๋ก ํ์ด์ผํ๋ ๊ฒ.
ํด๋น ์ ์ฒด์์ ๋ฎ์ ๋ฒ์ ์ java๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ์ญ์์ผ๋ก ๋ด๋ ค์ฃผ๋ ํจ์๊ฐ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ ๊ฒ์ด๋ค..
๊ทธ๋์ ํ๋ก ํธ์์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ฒ ๋์๋ค.
๊ณ์ฐ์
์ ์ฒด ๋ชฉ๋ก ์ - index - (ํ์ฌ ํ์ด์ง * ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์ - ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์)
- (ํ์ฌ ํ์ด์ง * ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์ - ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์): ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง ๋ง์ง๋ง ์์ดํ
์ ์ธ๋ฑ์ค
-> ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง๋ ๋ง์ง๋ง ์์ดํ ๋ฐ๋ก ๋ค์ ์์ดํ ์ ์์์ธ๋ฑ์ค์์ 1ํ์ด์ง ๋น ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ๋บ๋ค. ์ฆ ์ค์ ๋ก๋ ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง ๋ง์ง๋ง ์์ดํ ์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๋ ๊ฒ์ - ์ ์ฒด ๋ชฉ๋ก ์ - index: ์ ์ฒด ๋ฐ์ดํฐ์์ ๊ณ์ฐ๋ ์ธ๋ฑ์ค๋ฅผ ๋นผ์ ์ญ์์ผ๋ก ๋ณด์ฌ์ง ์ฒซ ๋ฒ์งธ ์์ดํ
์ ์ธ๋ฑ์ค
-> ์ ์ฒด ๋ฐ์ดํฐ์์ ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง ์ฒซ ๋ฒ์งธ ์์ดํ ์ ์ธ๋ฑ์ค๋ฅผ ์ป์ ์ ์๋ค. ๊ทธ๋ฌ๋๊น ์ญ์์ผ๋ก ํ์ํ ๋๋ ์ฒซ๋ฒ์งธ๊ฐ ๋ ๊ฒ์.
์๋ฅผ ๋ค์ด, ์ ์ฒด ๋ชฉ๋ก์ด 100๊ฐ๋ผ๋ฉด ํ์ฌ ํ์ด์ง๊ฐ 3ํ์ด์ง๊ณ , ํ์ด์ง๋น 10๊ฐ๋ฅผ ๋ณด์ฌ์ค๋ค๊ณ ํ๋ฉด (3-1) x 10 = 20 ์ด ๋ ๊ฒ์ด๊ณ , ๋ฐ๋ผ์ ์ ์ฒด ๋ชฉ๋ก ์ - index = 100 - 20 = 80 ์ด๋๋ค. ์ฆ 3ํ์ด์ง์์ ์ญ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์ด๋ค.
// ์ ์ฒด ๋ชฉ๋ก ์
const totalItems = 100;
// ํ์ฌ ํ์ด์ง
const currentPage = 3;
// ํ์ด์ง๋น ๋ฐ์ดํฐ ๊ฐ์
const itemsPerPage = 10;
// ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง ์ฒซ ๋ฒ์งธ ์์ดํ
์ ์ธ๋ฑ์ค ๊ณ์ฐ
const index = (currentPage - 1) * itemsPerPage;
// ์ญ์์ผ๋ก ์ ๋ ฌ๋ ์ธ๋ฑ์ค ๊ณ์ฐ
const reversedIndex = totalItems - index;
์ฝ๋๋ก ์ ์ด๋ณด๋ฉด ์์ ๊ฐ๋ค.
์ฌ๊ธฐ๊น์ง๋ ์ด์ ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง๋ ์ฒซ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ์ค์ ์ฝ๋์ ๋ฐ์ํ ๊ฒ์ ๋ค์ ๊ฒฐ๊ณผ๋ค.
const {
resultData: { paging, resultList },
} = data;
const currentPage = Number(paging.currentPage); // ํ์ฌ ํ์ด์ง
const itemsPerPage = Number(paging.recordCountPerPage); // ํ ํ์ด์ง์ ์ ํด์ง ๋ชฉ๋ก ๊ฐ์
const totalItems = Number(paging.totalRecordCount); // ์ ์ฒด ๋ชฉ๋ก ์
resultList.map((el: any, idx: number) => {
el.no = totalItems - idx - (currentPage * itemsPerPage - itemsPerPage);
});
์๋ฒ์์ ๋ฐ์ ๋ฐฐ์ด์ธ resultList์ ๊ฐ ์์ดํ ์ no์ ์ญ์์ผ๋ก ๋ง๋ ๊ฐ์ ๋ถ์ฌํ ๊ฑด๋ฐ,
totalItems - idx(์ญ์์ผ๋ก ์ ๋ ฌ๋ ์ํ์ ์์ดํ
์ธ๋ฑ์ค)์์ currentPage * itemsPerPage - itemsPerPage(ํ์ฌ ํ์ด์ง์์ ๋ณด์ฌ์ง๋ ์ฒซ ๋ฒ์งธ ์์ดํ
์ ์ธ๋ฑ์ค)๋ฅผ ๋นผ์ค๋ค.
์ด์ ์ด ๊ฐ๋ค์ el.no์ ํ ๋นํ๋ค.
ํ๋์ ๋ณด๊ธฐ(์์)
const currentPage = 3 // ํ์ฌ ํ์ด์ง
const itemsPerPage = 5 // ํ ํ์ด์ง์ ์ ํด์ง ๋ชฉ๋ก ๊ฐ์
const totalItems = 30 // ์ ์ฒด ๋ชฉ๋ก ์
const resultList = [
{ data: 'Item 1' },
{ data: 'Item 2' },
{ data: 'Item 3' },
{ data: 'Item 4' },
{ data: 'Item 5' }
];
resultList.map((el: any, idx:number) => {
el.no = totalItems - idx - (currentPage * itemsPerPage - itemsPerPage);
});
console.log(resultList);
์ด๋ ๊ฒ ํ๋๋ ๊ฒฐ๊ณผ๋
์ด๋ ๊ฒ ๊ฐ์ด ํ ๋น๋์ด์ ag-grid์ ์ฝ๊ฒ ๊ฐ์ ๋ฃ์ ์ ์์๋น
'Coding Diary' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Floating Labels Chakra UI๋ก ์ ์ฉํ๊ธฐ (feat. Next 14) (1) | 2024.03.11 |
---|---|
[Next] SNS๋ณ๋ก ๋์ ๋ผ์ฐํ (Dynamic Routes) ์ง์ ํ๊ธฐ (1) | 2024.03.05 |
Ag-grid์ ์ซ์๋ง ์ ๋ ฅ๋๊ฒ ํ๊ธฐ : agNumberColumnFilter (0) | 2023.10.02 |
Check Box ์ด์ฉํด์ Select option ๊ฐ ๋ณ๊ฒฝํ๊ธฐ (0) | 2023.09.22 |
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๋ฅผ ํ์ ์คํฌ๋ฆฝํธ๋ก ๋ณํ (4) | 2023.06.04 |