let a = [1,2,4,5]
라는 배열이 있다. 중간 2,4 사이에 3을 넣고 싶으면 어떻게 할까??? 지금까지 값을 삭제할 때만 사용했던 splice
메소드를 활용하면 된다. splice에 알아보자.
Syntax
array.splice(start, [,deleteCount [, item [, item2...]]])
위의 문법으로 해석하면 array의 start인덱스 부터 deleteCount만큼 삭제하고 입력받는 item들을 추가한다. 아래 몇가지 예시로 확인해보자.
const a = [1,2,4,5]
a.splice(2,0,3) //인덱스 2번에 3을 추가한다.
console.log(a) //[1,2,3,4,5]
a.splice(5,0,6,7) //인덱스 5번부터 6,7을 추가한다.
console.log(a) //[1,2,3,4,5,6,7]
맨 뒤의 값을 -1로 시작한다.
//위의 배열a를 이어서 활용하겠다.
a.splice(-3,2) //맨 뒤의 3번째(5)부터 2개를 지우겠다. [5,6]
console.log(a) //[1,2,3,4,7]
start인덱스부터 deleteCount만큼 삭제를 하고 뒤의 아이템을 추가로 삽입할 수 도 있다.
a.splice(-2,2,4,5) //맨뒤 2번째(4)부터 2개를 지우고 4,5,를 삽입한다.
console.log(a)[1,2,3,4,5]
splice는 삭제한 요소를 담은 배열을 반환한다. 삭제한 요소가 없을 경우 빈 배열을 반환한다.
//위의 배열a를 이어서 활용하겠다.
console.log(a.splice(0,2)) //[1,2]
console.log(a) //[3,4,5]
console.log(a.splice(0,0,1,2)) //[]
console.log(a) //[1,2,3,4,5]
str1.localeCompare(str2)
는 str2를 st1문자열과 비교했을 때 정렬상 전에 오는 지 후에오는지 혹은 같은 순서에 배치되는지 알려주는 숫자를 반환한다.
ex)
'apple'.localeCompare('banana') // -1
'apple'.localeCompare('apple') // 0
'banana'.localeCompare('apple') // 1
'apple'.localeCompare('apple fruit') // -1
localeCompare()
를 이용해 문자열 비교 함수를 손쉽게 만들 수 있다.
자바스크립트에서 기본 sort()
는 아스키코드 기준으로 정렬해준다. 기본적으로 맨앞에 있는 문자열을 기준으로 정렬할 때는 편리하다.
하지만 ['name kyle','name kim','name park'] 이런식으로 2번째 값들을 기준으로 정렬하기는 쉽지않다. 이런 문제를 localeCompare()
를 이용해 해결할 수 있다.
localeCompare()
를 이용해 두번째 단어를 비교하고 만약 같다면 첫번째 단어를 비교하는 함수를 만들어보자.const nameList = ['name kyle','name kim','name park']
//두번째 단어를 가져오는 함수
const secondWord = (str) => str.split(' ')[1]
const compare = (str1,str2) =>{
//두번째 단어로만 비교해서 n에 넣는다.
const n = secondWord(str1).localeCompare(secondWord(str2))
if(n!==0) return n //두 문자들이 같지 않는 경우에는 리턴
//두 문자들이 같은 경우에는 원래 str1,str2(첫번째 단어 포함)을 비교한다.
else return str1.localCompare(str2)
}
nameList.sort(compare)
console.log(nameList) //[ 'name kim', 'name kyle', 'name park' ]
활용 문제: leetcode_Reorder Data in Log Files
const intro = 'hello, my name is kyle! Welcome to 2021!! test1 test2 333test'
const parsedIntro = intro.split(/\W+/)
//["hello", "my", "name", "is", "kyle", "Welcome", "to", "2021", "test1", "test2", "333test"]
정말 편하게 활용할 수 있을 것만 같다. 이해를 해보려고 찾아봐도 사실 못찾겠다. 나중에 정규표현식과 split과 같은 메소드들을 어떻게 활용할 수 있는지도 알아봐야겠다.
활용 문제: leetcode_Most Common Word