Assignment
String의 slice() 는 자주 사용 되는 문자열 메소드 중 하나 입니다. 먼저 slice 에 대한 설명을 가볍게 읽어봅시다 👉 slice설명
그 후 sliceCityFromAddress 함수를 구현해 주세요.
sliceCityFromAddress 함수는 address 를 인자로 받습니다.
address 는 주소를 나타내는 string 입니다.
주어진 주소에서 도시를 찾아 삭제하고 새로운 주소를 리턴해 주세요.
도시는 무조건 ‘시’로 끝납니다. 예) “서울특별시”, “성남시”
‘시’는 주소에 한번만 포함되어 있습니다.
예를 들어, 다음과 같은 주소가 주어졌다면
"경기도 성남시 분당구 중앙공원로 53"
다음과 같은 값이 리턴되어야 합니다:
"경기도 분당구 중앙공원로 53"
1차 풀이 코드
function sliceCityFromAddress(address) {
// 풀이 1
let doIndex = address.indexOf("도");
let siIndex = address.indexOf("시");
console.log(doIndex);
console.log(siIndex);
//풀이 2
if (doIndex !== -1 && siIndex !== -1) {
return address.slice(0, doIndex+1) + address.slice(siIndex+1);
}
//풀이3
else if(siIndex === -1) {
return address
}
}
sliceCityFromAddress("대한민국 경기도 성남시 분당구 중앙공원로 53");
풀이
1.'도' ,'시'로 끝나는 인덱스 위치를 찾고, 출력값을 확인해 보왔다.
만약 찾고자하는 인덱스가 없으면 -1을 출력한다.
2. doIndex, siIndex가 둘다 -1이 아니라면(둘다 찾을 수 있다면),
return (0부터 doIndex-1) + (siIndex+1부터 끝까지)
( +1 을 주는이뉴는 slice범위는 int 인자 두개를 받고, num1이상 num2미만이기 때문에)
3. siIndex를 찾을수없으면 전체 주소를 출력한다.
복습하면서,
복습하면서 위 코드의 오류를 찾았다.
sliceCityFromAddress("대한민국 성남시 분당구 중앙공원로 53");
위처럼 doIndex 값을 넣지 않으면 undefined 된다.
doIndex가 없고 siIndex가 있을 때의 조건을 추가하려 했으나 답이 나오지않았다..
그래서 새로 짜 보았다.
공백 기준으로 나누어 보자
function sliceCityFromAddress(address) {
// 풀이 1.
let arr = address.split(" ");
//풀이 2.
for (let i = 0; i < arr.length; i++) {
if (arr[i][arr[i].length - 1] === "시") {
arr.splice(i,1);
console.log(arr[i].length-1)
}
}
//풀이3
address = arr.join(' ');
return address;
}
풀이
sliceCityFromAddress("대한민국 성남시 분당구 중앙공원로 53"); 넣었다면,
트렌드 따라가기 (ES6버전)
이를 ES6버전을 적극 활용하여 바꿔보았다.
function sliceCityFromAddress(address) {
let arr = address.split(" ");
//풀이 1.
for (let i in arr) {
if (arr[i][arr[i].length - 1] === "시") {
arr.splice(i,1);
console.log(arr[i].length-1)
}
}
address = arr.join(' ');
return address;
}
arr[배열]의 length를 알아서 파악하는 for -in !!
function sliceCityFromAddress(address) {
return address
.split(" ")
.filter(e => e[e.length - 1] !== "시")
.join(" ")
}
구글링하다 찾은 정답이다.
풀이하자면 공백으로 나누고 '시'가 없는것만 filter 그 다음은 다시 공백으로 join.
오늘 확실히 알고 넘어가는 것들
const int = 123456
const string = '문자입니다'
const arr = ['이','것',2,'배','열']
const obj = {ket:'vale', 이건:'오브젝트', 키값은문자도:'따음표필요없네'}
console.log(int.slice(2,4))
console.log(string.slice(2,4))
console.log(arr.slice(2,4))
console.log(obj.slice(2,4))
num1이상부터 num2미만까지 컷한다.
위의 코드를 출력해봐서 컷 할 수 있는 코드를 파악해보자.
const arr = ['어','느','게','진','짜','일','까',1,3,2,'오'];
for(let i in arr) {
console.log(arr[i])
}
배열 길이를 알아서 파악해준다. 진짜 supercode다..
우선 엄청 간단한 예제
const arr = [1, 10, 20, 30, 40, 50, 60]
const b =arr.filter(i => i>30)
console.log(b)
30 이상인 것만 filter 여기서 중요한 건 필터 한 것은 변수를 선언해서 값을 할당해 줘서야 한다
function isBigEnough(value) {
return value >= 10;
}
const arr = [12, 5, 8, 130, 44]
const filtered = arr.filter(isBigEnough);
console.log(filtered)
filter()안쪽은 함수를 파라미터로 할 수 있다.