어려운 함수들

김예린·2024년 1월 24일
0

누적 값 구할때 reduce함수를 쓰고싶은데 잘 몰라서 계속 for문 돌렸다ㅋㅋㅋ

reduce함수

배열의 각 요소에 대해 콜백 함수를 실행하면서 배열을 단일 값으로 축소하는 데 사용, 초기값과 콜백함수를 인자로 받으며, 배열의 각 요소를 순회하면서 콜백 함수를 호출하고 '최종 결과'를 반환한다.

reduce함수의 기본 구조

array.reduce(callback,initialValue);

콜백함수는 각 요소에 대해 실행되면서 누적된 결과를 반환하고 이 결과가 다음 호출에 사용된다. reduce함수는 최종결과를 반환한다고 일단 생각하자

const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((accumulator, currentValue) => {
  return accumulator + currentValue;
}, 0);

console.log(sum); // 15

numbers배열을 돌면서 reduce함수를 실행한다.
accumulator: 누적값
currentValue: 현재값

initialValue의 0은 누적값을 처음에 0으로 초기화하겠다는 의미이다.
var accumulator=0; 이러고 시작하는거랑 같은 의미
0+1=1 -> 1+2=3 -> 3+3=6 -> 6+4=10 -> 10+5=15
이렇게 리턴의 결과가 다음 호출의 누적값으로 사용되는 것

자바스크립트의 Math객체

Math.min()

주어진 숫자들 중에서 가장 작은 값 반환

Math.max()

주어진 숫자들 중에서 가장 큰 값 반환

Math.round()

주어진 숫자를 반올림

Math.floor()

주어진 숫자 내림

Math.abs()

주어진 숫자의 절대값 반환

Math.sqrt()

주어진 숫자의 제곱근 반환 Math.sqrt(16)=4

Sort 함수

sort함수는 불변하지 않다. 원본 배열을 변경한다. 그래서 복사본써야함

let originalArray = [3, 1, 4, 1, 5, 9];

// 원본 배열의 복사본을 만들고 그것을 정렬
let sortedArray = [...originalArray].sort();

console.log("Sorted Array: ", sortedArray);
console.log("Original Array: ", originalArray);

sort(): 기본적으로 '문자열'로 간주하여 정렬한다.
문자열로 정렬할 때는 유니코드 코드(모든 문자는 고유한 코드를 가진다) 포인트 순서를 따른다.
그래서 숫자가 잘 정렬되지 않을때가 있다.

array.sort([compareFunction])

정렬순서를 정의하는 비교함수를 전달할 수 있다(optional)
왠만하면 sort()안에 비교함수를 꼭 넣자!!

sort((a,b)=>a-b) : 오름차순 정렬
이것은 숫자를 비교하여 정렬한다.
두개의 매개변수 a와 b를 받아서 a-b의 결과에 따라 정렬 순서를 결정한다.
a-b가 음수이면 a를 b보다 앞으로 정렬하고, 양수이면 b를 a보다 앞으로 정렬한다.
sort((a,b)=>b-a) : 내림차순 정렬

객체로 이루어진 배열의 정렬

var items = [
  { name: "Edward", age: 21 },
  { name: "Sharpe", age: 37 },
  { name: "And", age: 45 },
  { name: "The", age: -12 },
  { name: "Magnetic", age: 13 },
  { name: "Zeros", age: 37 },
];

// age 기준으로 오름차순정렬
items.sort(function (a, b) {
  return a.age-b.age;
});
// age 기준으로 내림차순정렬
items.sort(function (a, b) {
  return b.age-a.age;
});

// name 기준으로 정렬
items.sort(function (a, b) {
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  // 이름이 같을 경우
  return 0;
});
profile
아자아자

0개의 댓글