이번주차는 알고리즘을 풀어보면 자바스크립트 문법과 친해지는 시간이다. 첫날 알고리즘 공장 가동을 시작했을때는 이걸 하루종일한다고? 도라방스..이번주차는 어떻게 버티지...? ;;;였는데...
하다보니 맞추는 재미도 있고(아주 조금), 팀원들과 서로의 답을 비교해가며 풀으니 비슷한 유형의 문제에는 요령도 생겨서 4일동안 주어진 28문제를 다 풀어버렸다....
남은 3일 동안에는 추가적인 문제를 음미하면서 풀예정이다.
룰루알고리즘은 즐거워짜릿해살려죠
문제를 푸는 감을 잃었을때 가끔씩 꺼내보면 좋을거같다.
그리고 자바스크립트 코드를 짤때에도 도움이 될 예정^^
위 내용들은 문자열을 다루는 프로그래머스의 <하>문제에서 배운 내용들이다.
foreach
forEach() 메서드는 주어진 함수를 배열 요소 각각에 대해 실행합니다.
fruits.forEach((fruit) => console.log(fruit));
foreach가 for문에 비해 성능은 별로지만 가독성이 더 좋으니 가벼운경우라면 foreach룰 사용할것
map
배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
arr.map((a,b)=>{a[b]})
const map1 = array1.map(x => x * 2);
for in
for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)
for in 반복문은 : for (var array값 in array){}
이렇게 사용한다. array값은 i번째로도 사용이 가능하다.
every로 모든 인덱스를 검사하여 리턴..
every() 메서드는 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다.
Boolean 값을 반환합니다.
array1.every(isBelowThreshold)
const isBelowThreshold = (currentValue) => currentValue < 40;
count ++
count = count +1
sum += x
sum = sum + x
reduce
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
while문
while문은 조건문이 참일 때 실행되는 반복문이다. 조건은 문장안이 실행되기 전에 참, 거짓을 판단한다.
while (n < 3) { n++; x += n; }
for문 (i의 조건설정이 문제해결의 key가 되기도 한다. )
if문
삼항연산자
isMember ? '$2.00' : '$10.00'
switch
switch (expression) { case value1: //Statements executed when the //result of expression matches value1 [break;] case value2: //Statements executed when the //result of expression matches value2 [break;] ... case valueN: //Statements executed when the //result of expression matches valueN [break;] [default: //Statements executed when none of //the values match the value of the expression [break;]] }
number
Number('123'); // 숫자 123을 반환
Number('unicorn'); // NaN
parseInt
parseInt 함수는 첫 번째 인자를 문자열로 변환하고, 그 값을 파싱하여 정수나 NaN을 반환합니다.
parseInt(string)
주의: parseInt('0e0') // 0
문자 * 숫자
"1" * 1 // 숫자1
tostring
obj.toString()
tostring => split
-->배열이 된다.
* 스프레드 문법
substring
substring() 메소드는 string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환합니다.
arr.substring(시작, 끝)
splice
(지정된 포지션에서 삭제가능)
splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다.
months.splice(start, deletecount, add) //
slice
slice() 메서드는 어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환합니다. 원본 배열은 바뀌지 않습니다.
arr.slice([begin[, end]])
pop
pop() 메서드는 배열에서 마지막 요소를 제거하고 그 요소를 반환합니다.
fruits.pop() //뒤에서 하나가 없어짐
filter 새로운배열로 반환
filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.
let result = arr.filter(word => word % divisor === 0 ) 간단한 검색도 가능하다
let res = users.filter(it => new RegExp('oli', "i").test(it.name));``
find
find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.
arr.find(element => element % divisor === 0 )
indexof
indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.
console.log(fruits.indexof('apple'));
includes
includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별합니다.
[1, 2, 3].includes(2); // true
* 정렬시
sort
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.
원배열이 정렬되는 것에 유의하세요.
숫자정렬시 : result.sort((a,b) => a-b)
문자정렬시 : months.sort()
push
push는 원본배열자체를 바꿈
fruits.push('peach');
fruits.pop() //뒤에서 하나가 없어짐
* 숫자만 찾고 싶을때
isNaN
isNaN() 함수는 어떤 값이 NaN인지 판별합니다.
Math.min(a, b)
Math.max(a, b)
Math.abs(b-a)
repeat
${}
""+ +""
date함수
join("")
Math.sqrt
arrA.filter(it => arrB.includes(it)); // returns [1, 2]
Math.min(...arr)
return e > Math.min(...arr)
//
. 최소값보다 큰 값을 빼고 새로운 배열로 반환 const arrS = [...arr, 5, 6];
-->스프레드문법 왜사용? Math.min(arr) // NaN
이중배열을 펼칠수도 있다.
let nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let flat = nested.reduce((acc, it) => [...acc, ...it], []);
//flat is [1, 2, 3, 4, 5, 6, 7, 8, 9]