누적합
reduce
누적할때 사용 acc가 합의 결과, 0으로 초기화, cur이 a 순서대로, idx가 index
function solution(a, b) {
var answer = a.reduce((acc, cur, idx) => acc += cur*b[idx], 0)
return answer
}
정렬
sort()
정렬하기 : array, object일때 사용가능
기본개념
- sort(a, b)에서 a는 다음 인자, b는 현재 idx인자를 뜻함
- sort([compareFunction])에서 [compareFunction] 이 어떤 값을 반환하는지가 중요
- 0보다 크다
- 0이다
- 0보다 작다 ⇒ 이 경우에만 앞 뒤 순서가 바뀜
- answer.sort((next, prev) ⇒ (next > prev) - (next < prev));
- (어떤게 true인지에 따라 값이 바뀌도록) 라고 작성하면 일반적인 sort함수처럼 작동함. 왜냐하면 앞에 숫자가 크면 1 반환하고 뒤에 숫자가 크면 -1을 반환함
- 밑에 함수에서 strings의 한 요소의 한 글자씩만 비교하여 정렬하는 것도 가능
//string = ["car", "naver", "abc"] n = 1
function solution(strings, n) {
var answer = [];
strings.sort((next, prev) => {
let first = next[n] //e
let second = prev[n] //u
//가운데 글자가 같으면
if (first === second) {
//prev보다 next가 작으면 자리 바꾸기
return (next > prev) - (next < prev)
} else {
//같지 않으면 n번째 글자만 비교해서 둘중에 작은거 순으로 반환
return (first > second) - (first < second)
}
})
console.log(strings)
return strings;
}
숫자정렬
//숫자오름차순
answer.sort((a,b) => a-b)
//숫자내림차순
answer.sort((a, b) => b - a)
문자정렬 : array에서만 사용
answer = ['c', 'b', 'a']
answer.sort() //a,b,c순
Object 정렬
var student = [
{ name : "재석", age : 21},
{ name : "광희", age : 25},
{ name : "형돈", age : 13},
{ name : "명수", age : 44}
]
/*이름순 정렬*/
//오름차순
student.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)
// 광희 명수 재석 형돈
//내림차순
student.sort((a, b) => a.name > b.name ? -1 : a.name < b.name ? 1 : 0);
//형돈 재석, 명수, 광희
/*나이순 정렬*/
//오름차순
var sortinField = "age";
student.sort((a, b) => a[sortinField] - b[sortInField]);
//13, 21, 25, 44
//내림차순
student.sort((a, b) => b[sortinField] - a[sortinField]);
//44, 25, 21, 13
localeCompare()
비교함수 비교하는 인자보다 localeCompare안에 들어가는 인자가 더 빠른지 확인 sort와 잘 쓰임
let a = 'JavaScript'
a.localeCompare('apple') //1
a.localeCompare('zbra') //-1
a.localeCompare('JavaSciprt')//0
function solution(strings, n) {
//localCompare은 next보다 prev가 앞쪽에 있니?
strings.sort((next, prev) => next[n] === prev[n] ?
next.localeCompare(prev) : next[n].localeCompare(prev[n])
)
return strings;
}