Coding Diary

[JS, React] ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ

Dong _ hwa 2023. 11. 27. 23:08

 

์‚ฌ๊ฑด์˜ ๊ฒฝ์œ„๋Š” ์ด๋Ÿฌํ•˜๋‹ค.. 

๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ๋ณด์ด๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ 87 ๊ฑด์ด๋ผ๋ฉด ์ฒซ๋ฒˆ์งธ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฒˆํ˜ธ๋Š” 87, 86, 85 ... ์ด๋Ÿฐ์‹์œผ๋กœ ํ–ˆ์–ด์•ผํ•˜๋Š” ๊ฒƒ.

ํ•ด๋‹น ์—…์ฒด์—์„œ ๋‚ฎ์€ ๋ฒ„์ „์˜ java๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์—ญ์ˆœ์œผ๋กœ ๋‚ด๋ ค์ฃผ๋˜ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค..

๊ทธ๋ž˜์„œ ํ”„๋ก ํŠธ์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๊ณ„์‚ฐ์‹

์ „์ฒด ๋ชฉ๋ก ์ˆ˜ - index - (ํ˜„์žฌ ํŽ˜์ด์ง€ * ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ - ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜)

 

  1. (ํ˜„์žฌ ํŽ˜์ด์ง€ * ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ - ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜): ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋ณด์—ฌ์งˆ ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ์˜ ์ธ๋ฑ์Šค
    -> ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋ณด์—ฌ์ง€๋Š” ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ ๋ฐ”๋กœ ๋‹ค์Œ ์•„์ดํ…œ์˜ ์˜ˆ์ƒ์ธ๋ฑ์Šค์—์„œ 1ํŽ˜์ด์ง€ ๋‹น ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๋บ€๋‹ค. ์ฆ‰ ์‹ค์ œ๋กœ๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ ๋ณด์—ฌ์งˆ ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ž„
  2. ์ „์ฒด ๋ชฉ๋ก ์ˆ˜ - 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์— ์‰ฝ๊ฒŒ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์—ˆ๋‹น