코딩테스트 대비 몸만들기. 뇌지컬이 딸리면 피지컬이라도 좋아야...
Array(N).fill(0) // [0,0,0,0,...]
둘째줄 처럼 작성하면 더욱 간결하다. Array.from에서 콜백을 바로 받아 mapping한 결과를 만들 수 있다.
Array(N).fill(null).map((_, idx) => idx + 1); // [1,2,3,4,...]
Array.from(new Array(5), (_, idx) => idx + 1); // [1,2,3,4,5]
Array.from('myStr', (elem, idx) => idx + ' ' + elem)
Array.from이 콜백을 받는점을 활용하면 이렇게도 출력가능하다.
Array.from('myStr', (elem, idx) => idx + ': ' + elem);
// ['0: m', '1: y', '2: S', '3: t', '4: r']
문자열을 배열로 변경하려면 Array.from, ...
, split 세 가지 방법 활용 가능하다.
Array.from('myStr') // ['m', 'y', 'S', 't', 'r']
Array.of('myStr', 'myStr2') // ['myStr', 'myStr2']
'myString'.split(''); // ['m', 'y', 'S', 't', 'r', 'i', 'n', 'g']
'myString'.split(' '); // ['myString']
배열을 문자열로 바꾸려면 toString()
, join()
을 사용한다. join()이 좀 더 유연하다.
const arr = ['Apple', 'Banana', 'Orange'];
arr.toString() // Apple,Banana,Orange
arr.join('-') // Apple-Banana-Orange
가장 간단하다. 생성된 객체의 키는 배열의 인덱스가 된다.
arr = ['가','나','다']
newObj = {...arr} // {'0':'가', '1':'나', '2':'다'}
key value pair 배열을 객체로 변환한다. Map을 Object로도 변환 가능하다.
let arr = [['first', 'A'], ['second', 'B'], ['third', 'C']];
let obj = Object.fromEntries(arr);
console.log(obj); // { first: 'A', second: 'B', third: 'C' }
const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
const mapToObj = Object.fromEntries(map);
console.log(mapToObj); // { foo: "bar", baz: 42 }
반대로는 이렇게 할 수 있다. Object.keys()와 map을 활용한다.
var obj = {"1":5,"2":7,"3":0,"4":0,"5":0}
var result = Object.keys(obj).map((key) => [Number(key), obj[key]]);
// [[1,5],[2,7],[3,0],[4,0],[5,0]]
slice(start [, end])
slice는 원본불변, slicing이 적용된 새로운 배열을 반환한다.
만약 start에 -2를 넣으면 배열의 끝에서 2개 원소가 담긴 배열을 반환한다.
음수와 양수값을 start, end에 모두 삽입가능하다. 음수값에 arr.length를 더하면 해당 양수값 인덱스를 구할 수 있다.
arr = Array.from(Array(10), (elem, idx) => idx + 1);
arr.slice(-2) // [-9, -10]
arr.slice(-2, -5) // [];
splice(start[, deleteCount[, item1[, item2[, ...]]]])
splice는 인자들의 조합을 통해 다양한 방식으로 활용 가능하다. splice를 통해 요소의 삭제, 변경, 추가 모두 가능하다. splice는 원본을 바꾼다.
arr.splice(2); // 2번 인덱스부터 이후의 모든 요소 제거, 반환값은 제거된 배열.
arr.splice(2, 1); // 2번 인덱스로부터 1개의 원소 제거, 반환값은 제거된 배열.
arr.splice(2, 0, ...[7,8,9]); // 2번 인덱스에 0개 제거하고 7,8,9를 삽입
arr.splice(3, 1, 'i got in'); // 3번 인덱스에 1개 제거하고 'i got in'을 삽입 반환값은 삭제된 배열
원본을 변경
shift()와 unshift()가 헷갈린다. 이렇게 정리한다.
참고로 배열 중간에 값을 삽입하거나 제거할때는 splice()
를 활용한다.
Set, filter, forEach 등 여러 방법이 있지만 Set을 활용하는 것이 가장 직관적이라 생각한다.
const arr = [1,2,3,1,2,4,5];
const set = new Set(arr);
const uniqArr = [...set];
중첩 배열 구조를 평탄화한다. 인자로 depth를 지정할 수 있다.
depth를 Infinity로 지정하면 끝까지 평탄화한다.
const newArr = arr.flat([depth])
원본을 변경한다. 원본을 유지하고싶으면 slice나 ...연산자를 활용해야 한다.
arr.sort((a,b) => a - b); // 원본 변경
arr.slice().sort((a, b) => a - b); // 원본 불변
arr.slice().sort((a, b) => a[0].charCodeAt() - b[0].charCodeAt()); // 첫번째 문자 기준으로 문자열 정렬
arr.slice().sort((a, b) => a.localeCompare(b)); // 모든 문자를 기준으로 문자열 정렬
// 한글도 가능함
arr2 = ['다','카','라','나','파','가']
arr2.slice().sort((a, b) => a.localeCompare(b)); // 한글 가나다순 정렬
원본을 변경
배열을 뒤집는다.
해당 배열에서 인자로 전달된 값과 일치하는 맨 처음 인덱스를 반환한다.
배열이 해당 인자를 요소로 가지고 있는지를 반환한다.