본문 바로가기

programming/Javascript

[JS] List of Json 객체로 이루어진 리스트에서 최솟값/최댓값 또는 해당 객체의 index 찾기

흔하게 많이 사용되는 간단한 알고리즘(?)을 정리하려한다

 

다음과 같이 객체로 이루어진 리스트가 있다

const transactionList = [
        {
          id: 1,
          transactionId: 99,
          sellDate: "20220801",
          price: 300,
        },
        {
          id: 2,
          transactionId: 99,
          sellDate: "20220701",
          price: -200,
        },
        {
          id: 3,
          transactionId: 99,
          sellDate: "20221001",
          price: 400,
        },
        {
          id: 4,
          transactionId: 99,
          sellDate: "20221101",
          price: -100,
        },
      ];

 

 

[Case1] 여기서 sellDate 가 가장 빠른 날짜를 찾고 싶다

 

1. 리스트 안의 Object 에서 필요한 키(sellDate)에 해당하는 Value 들을 다 뽑아서 리스트로 구성한다

2. Math.min을 이용하여 최솟값을 리턴해준다

function findMin(key) {
	return Math.min(...transactionList.map((obj) => obj[key]));
}
const firstTradeDate = findMin("sellDate")


// result : 20220701

 

 

[Case2] 이번엔 sellDate가 가장 빠른 날짜 객체 통채로를 찾고 싶다.

reduce 메소드를 이용하여 해당 객체의 index를 가져오기로 한다

  const getFirstTargetIndex = (array, target) =>
    array.reduce(
      (prevIdx, value, curIdx, arr) =>
        value[target] >= arr[prevIdx][target] ? prevIdx : curIdx,
      0
    );

  const answer = getFirstTargetIndex(transactionList, "sellDate");
  console.log("answer", answer);
  
  // result : 1

 

reduce 메소드는 매개변수로 콜백함수와 초기값을 받는다

 

콜백함수

(prevIdx, value, curIdx, arr) =>
        value[target] >= arr[prevIdx][target] ? prevIdx : curIdx,

콜백함수는 (이전 index, 현재 object, 현재 index, 리스트) 를 매개변수로 받는다

여기서 이전 Index는 계속 갱신되는 값이다.

누산을 통해서 우리는 index 값을 리턴받기 때문에 index 값이 받아지는 것이다.

 

 

초기값

0

여기서 0은 직접 비교대상이 되는 숫자 0의 역할이 아니고, 초기 index 역할이다

arr[0] 번째의 값을 초기값으로 잡아서 비교를 시작한다