흔하게 많이 사용되는 간단한 알고리즘(?)을 정리하려한다
다음과 같이 객체로 이루어진 리스트가 있다
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] 번째의 값을 초기값으로 잡아서 비교를 시작한다
'programming > Javascript' 카테고리의 다른 글
Javascript ?? (null 병합 연산자) 와 || (OR 연산자) 의 차이 (0) | 2024.08.02 |
---|---|
Fetch try-catch : 400 은 response, 401은 catch error 로 빠진다면? (1) | 2024.06.12 |
Node-Sequelize-Mysql (4) Model 생성 & migrations 파일 생성 (0) | 2022.07.06 |
Node-Sequelize-Mysql (3) Mysql 로컬 db docker 띄우기 (0) | 2022.07.06 |
Node-Sequelize-Mysql (2) Sequelize 설치 (0) | 2022.07.06 |