• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

배열함수 filter 문제

22.05.03 00:44 작성 조회수 94

0

let doubleLetter =  names.filter((item) => {

    let splitName = item.split("");

    return splitName.some((letter, index) => letter == splitName[index + 1]);

  })

console.log(doubleLetter)

 

filter 조건에 some을 사용해서 true가 반환되면 true에 부합하는 배열의 문자열이 반환되는걸로 이해했습니다.

그런데 some 조건에 letter가 어떤 역할인지 잘 모르겠어요.. ㅠㅠ

splitName[index] == splitName[index + 1] 이렇게 하면 names 배열이 전부 콘솔창에 뜨던데 이건 왜 안되는건가요??

찾아보니 split이 지정한 구분자로 문자열을 나눠서 배열에 담아 리턴한다고 나와있던데 

let names = [ "Steven Paul Jobs", "Bill Gates" ];

이면 item.split("") 했을 때,  let splitName = [["Steven", "Paul" , "Jobs"], ["Bill", "Gates"]] 이렇게 되는게 맞나요??

그러면 letter == splitName[index + 1] 은 어떻게 되는건가용...

 

답변 1

답변을 작성해보세요.

1

안녕하세요!

split은 문자를 나누는 함수입니다 () 안에 들어간 값 기준으로 나누게 됩니다 

let names = [ "Steven Paul Jobs", "Bill Gates" ];

이는 문자가 아닌 배열이기 때문에 split함수를 쓸 수 없습니다

let name = "Steven Paul Jobs" 라면 

name.split(" ") 이 가능합니다 

이와같은 경우에는 공백을 기준으로 나누기 때문에 

반환값은 배열로 

["Steven", "Paul" , "Jobs"]

로 나오게 됩니다. 

split("")를 하게되면 공백이아닌 문자열을 하나하나 나누게 됩니다 그래서 

['S', 't', 'e', 'v', 'e', 'n', ' ', 'P', 'a', 'u', 'l', ' ', 'J', 'o', 'b', 's'] 가 결과값이 됩니다

 

some에서의 letter는 이 글자 하나하나를 다시 가져오는 역할을 합니다 

따라서 letter에는 매 턴 마다 S, t, e, v, e, n 이 차례로 들어가게 됩니다

 

 

HW님의 프로필

HW

2022.05.08

와 이해하고 소름돋았어요 ㅋㅋㅋ 감사합니당