Frudy
6k
2020-12-18 20:18:37
5
470

Typescript 배열 균등하게 자르기 함수 만들어봤습니다.



구현하려는 웹사이트에 이런 차트가 있었는대요,


뭐 이런 검색폼하고 붙어있었구요,

기간동안 "일일 스벅 아이스 아메리카노 판매량"을 차트로 보는거라고 이해하시면 좋을거에요.


그래서 2019년 12월 1일 ~ 2020년 12월 1일 기간으로 잡고 검색하면


무려 365개의 배열이 생기고,

차트에 365개의 데이터가 보여지는 일이 있었습니다.


그래서 배열을 균등하게 잘라야겠다는 생각을 했습니다.


[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 배열이 있고,

최대 10개까지만 보여줄 수 있다면,

1~12 배열중에 2개를 빼야하는데,

만약 2개를 뺀다면, 

[1, 2, 3,      5, 6, 7,       9, 10, 11, 12] 이렇게 4와 8이 빠진 배열로 나오는게

차트로 그렸을 때 최대한 덜 어색할거라고 판단했어요.


export function divide<T>(array: T[], maxSize: number): T[] {

const arrayLength = array.length;

if (arrayLength <= maxSize) {
return array;
}

const overCount = arrayLength - maxSize;
const magic = arrayLength / (overCount + 1);
const removeIndexes = getNumberArray(1, overCount).map(value => Math.floor(value * magic));

return array.filter((value, index) => !removeIndexes.includes(index));
}

const test = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
test.forEach(maxSize => {
const result = divide(test, maxSize);
console.log('maxSize', maxSize, 'arrayLength', result.length, 'array ==>', result.join(', '));
});


콘솔로 테스트를 해본결과,




이렇게 잘 의도대로 동작했습니다.


처음에 사용자가 이렇게 사용할지도 모른다는 생각이 들어서... 난감했는데

이런식으로 해결을 해보려고 해요.


수동검색(기간)폼은 이런걸 조심해야하는구나 싶었어요..

0
  • 댓글 5

  • ISA
    4k
    2020-12-18 21:42:55

    궁금한게 원래 그런건 한번에 조회 할 수 있는 범위를 제한하지 않나요? 1일단위 조회의 경우 일주일만 본다거나 일 단위 월단위 년 단위 마다 데이터 합산을 따로 해서 한다는 방식으로 했던거 같은데

  • ISA
    4k
    2020-12-18 21:43:48

    그래도 배열 자체를 균등하게 나누는 기능은 만들어두면 쓸 곳이 있겠네요.

  • Frudy
    6k
    2020-12-18 22:57:11
    기획서에
    빈도수설정하는곳 (1시간 1일 1달)과
    기간설정하는  곳(시작일 종료일)

    이렇게 [수동조회]폼이 있었구여


    [금일 1시간단위 조회버튼]
    [최근 7일간 1일단위 조회버튼]
    이렇게 간편조회버튼이 있었어요.

    그래서 수동조회할때 기간을 제한하지못했어요.
    굳이한다면 현재보다미래를 선택하지못하게만요.
  • 라모네기사
    156
    2020-12-30 13:39:42

    그래프를 보여준다는건 통계성 자료라는건데,

    통계성 자료의 특정부분을 잘라서 보여주는게 조금 위험하지 않을까 하는 생각이 듭니다.

    합쳐서 평균을 내는것도 아닌 누락시킨다는 부분이..

  • Frudy
    6k
    2020-12-30 14:20:47

    음 그쪽은 생각해보지않은부분이긴한대요,

    예제는 괜찮지않을까요?


    만약 수동조회폼을 통해

    10년간 일일 스벅 아이스아메리카노 판매량 조회하는데

    그래프로 보여줄수있는 날짜갯수가 10개라면


    2020년 12월30일 일일 아이스아메리카노가 몇잔팔렸고

    2019년 12월30일은 몇잔팔렸고


    등등 표시되는 데이터는 문제가없어요.

    2020년 12월30일에는 정말 그 잔 수만 팔렸으니까요.


    대신 합져서 종합내서 보여주는곳은 누락되면안되겠죠.

    10년동안 팔린 누적 아메리카노판매량같은

    종합내는 곳이있다면 거기는 정말로 다 보여줘야겠죠.

    122억잔팔렸다 이런식으루요.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.