배열함수 연습 문제
본문 바로가기
항해 중/2주차 알고리즘(프로그래머스)

배열함수 연습 문제

by 은돌1113 2021. 11. 8.

 

let names = [
  "Steven Paul Jobs",
  "Bill Gates",
  "Mark Elliot Zuckerberg",
  "Elon Musk",
  "Jeff Bezos",
  "Warren Edward Buffett",
  "Larry Page",
  "Larry Ellison",
  "Tim Cook",
  "Lloyd Blankfein",
];

-> 공통적으로 사용되는 배열

 

1. map 문제

 

- 모든 이름을 대문자로 바꾸어서 출력 하세요 (예-[“Steven”,“Bill”,“Mark”,“Elon”…])

names.map((item)=>{
  return console.log(item.toUpperCase())
  // .toUpperCase() : 소문자 -> 대문자로 변환
  // .toLowerCase() : 대문자 -> 소문자로 변환
})

or

let data = names.map((item)=>{
  return item.toUpperCase()
  // .toUpperCase() : 소문자 -> 대문자로 변환
  // .toLowerCase() : 대문자 -> 소문자로 변환
})

console.log(data)

: map() 함수는 반환값이 존재하기 때문에 return 키워드를 사용 하였고 반환값을 담을 변수를 선언 해주었다.

 

- 성을 제외한 이름만 출력 하세요 (예-[“SPU”,“BG”,“MEZ”,“EM”…])

let data = names.map((item)=>{
  return item.split(" ")[0]
  // split() 함수를 사용해서 특정 조건에 맞춰 item을 잘라주고
  // split() 함수의 반환값은 배열로 나오기 때문에
  // 출력 하고자 하는 인덱스 값을 설정하였다.
})

console.log(data)

 

- 이름의 이니셜만 출력 하세요

let data = names.map((item)=>{
    let splitName = item.split(" ")
    let initial = ''
    // 이니셜을 담을 변수
    splitName.forEach((nameItem)=>{
      // splitName이라는 배열을 forEach 함수를 사용해서 반복문을 돌린다.
      initial += nameItem[0]
      // nameItem의 첫번째 글자를 initial에 담는다.
    })
    return initial
})
console.log(data)

 

2. filter 문제

 

- 이름에 a를 포함한 사람들을 출력 하세요

let data = names.filter((item)=>{
  return item.includes("a")
  // includes() 함수는 문자열이 특정 문자열을 포함하고 있는 지 확인하는 메소드입니다.
})

console.log(data)

 

- 이름에 같은 글자가 연속해서 들어간 사람을 출력 하세요 (예-tt,ff,ll 이런 글자들)

let data = names.filter((item)=>{
  let splitName = item.split("")
  return splitName.some((letter, index) => letter == splitName[index+1])
  // some() 함수를 사용해서 하나라도 참이면(연속된 글자가 있으면) true를 반환하여
  // splitName을 return 한다.  
})

console.log(data)

 

3. some 문제

 

- 전체 이름의 길이가 20자 이상인 사람이 있는가?

let data = names.some((item)=>{
  let itemLength = item.length
  return itemLength >= 20
})

console.log(data)

 

★★ 이해하지 못함 ★★

- 성을 제외한 이름에 p를 포함한 사람이 있는가? (대소문자 상관하지 않는다.) 

console.log(names.some((item)=>{
  let splitName = item.split(' ')
  splitName.pop()
  return splitName.some(eachName=>eachName.toLocaleLowerCase().includes("p"))
}))

 

4. every 문제

 

- 모두의 전체 이름의 길이가 20자 이상인가?

let data = names.every((item)=>{
  return item.length >= 20
})

console.log(data)

 

- 모두의 이름에 a가 포함되어 있는가?

let data = names.every((item)=>{
  let splitName = item.split()
  return splitName.every((nameItem)=>{nameItem.includes('a')})
})

console.log(data)

 

5. find 문제

 

- 전체 이름의 길이가 20자 이상인 사람을 찾으세요

let data = names.find((item)=>{
  return item.length >= 20
})

console.log(data)

 

- 미들네임이 포함 되어 있는 사람을 찾으세요 (예-Steven Paul Jobs)

let data = names.find((item)=>{
  let splitName = item.split(" ")
  return splitName[1]
  // splitName[1]에 값이 있는 사람 중 첫번째로 나오는 사람을 return 한다.
})

console.log(data)

 

6. findIndex 문제

 

- 전체 이름의 길이가 20자 이상인 사람의 인덱스 번호를 찾으세요

let data = names.findIndex((item)=>{
  return item.length >= 20
})

console.log(data)

 

- 미들네임이 포함되어 있는 사람의 인덱스를 찾으세요

let data = names.findIndex((item)=>{
  let splitName = item.split(" ")
  return splitName[1]
  // splitName[1]에 값이 있는 사람 중 첫번째로 나오는 사람을 return 한다.
})

console.log(data)

 

배열함수 강의 및 정리는 여기를 참고

https://eundol1113.tistory.com/91

 

배열함수(forEach, map, filter, some, every, find, findIndex)

배열 함수 리스트 - forEach : 반환값이 없다, 단순 for문과 같이 작동한다. - map : 반환값을 배열에 담아 반환한다. - filter: 조건에 충족하는(true) 아이템만 배열에 담아 반환한다. - some: 조건에 충족

eundol1113.tistory.com

댓글