버튼을 컴포넌트로 분리할 때 event 넘겨주기
분리하기 전에 작성은
onClick={()=>함수명(필요한 인자)} 이 방식으로 작성했고, 정상적으로 기능도 했다.
하지만 분리하고 난 후에
클릭한 요소의 event값을 받아오는 부분은 자동으로 되지 않아서
콘솔에 event가 undefined로 확인되었다.
그래서
onClick={(event)=>함수명(event,필요한 인자)} 이렇게 클릭할 때 event 요소를 같이 넘겨주고,
onSubmitHandler선언부에서 ( event, id )로 인자를 두개 받아주면 작동이 된다!
프로그래머스 입문 : 최댓값 구하기(1)
sort 메서드를 이용해서 내림차순으로 정렬하면 간단하게 풀릴 문제이지만,
sort를 사용하지 않고 풀어보고 싶었다.
첫번째 시도
function solution(numbers) {
var answer = 0;
// max값 찾기
let max = 0;
for (let i = 0; i < numbers.length; i++) {
if (max - numbers[i] < 0) {
max = numbers[i];
}
}
// max다음으로 큰 값 찾기
let secondMax = 0;
let newNumbers = numbers.filter((i) => i != max);
for (let i = 0; i < newNumbers.length; i++) {
if (secondMax - newNumbers[i] < 0) {
secondMax = newNumbers[i];
}
}
answer = max * secondMax;
return answer;
}
console.log(solution([1, 2, 3, 4, 5]));
console.log(solution([0, 31, 24, 10, 1, 9]));
질문하기 내용을 살펴보던 도중 위의 댓글을 보고 결과값을 확인해보니 20이 나왔다.
filter로 배열에 있는 max 값을 모두 제거해버려서 오류가 나는 것이라고 생각되어 아래와 같이 코드를 수정했다.
두번째 시도
function solution(numbers) {
var answer = 0;
// max값 찾기
let max = 0;
for (let i = 0; i < numbers.length; i++) {
if (max - numbers[i] < 0) {
max = numbers[i];
}
}
console.log(max);
// max다음으로 큰 값 찾기
let secondMax = 0;
let maxIndex = numbers.indexOf(max); //최대값 인덱스 찾기
numbers.splice(maxIndex, 1); //배열에서 최대값 제거
for (let i = 0; i < numbers.length; i++) {
if (secondMax - numbers[i] < 0) {
secondMax = numbers[i];
}
}
console.log(secondMax);
answer = max * secondMax;
return answer;
}
indexOf 메서드를 이용해서 최대값이 있는 제일 첫번째 인덱스를 찾고,
배열에서 그 부분만 딱 한개 제거한 후에
반복문을 실행시켜서 secondMax를 찾아낸다.
이렇게 하면 max 값이 2개 이상 있어도 오류가 나지 않는다.