[JS] 배열 내장 method를 사용해 데이터 수정

YTT.erica·2024년 5월 15일

프로젝트 상황

현재 유저 프로필 사진 혹은 닉네임을 변경할 경우에, 유저가 이전에 작성했던 게시글과 댓글에서 보이는 유저의 프로필 사진과 닉네임은 변경하는 로직을 구현하지 않았다.

그 이유는... 이제 express가 아니라 spring boot에서는 유저 정보만 수정이 된다면 userId로 게시글과 댓글을 join하면 잘 반영이 될 것이기 때문이다!

하지만 지금은... posts와 comments 데이터에 유저 이미지와 유저 닉네임, 유저 아이디를 저장했기 때문에 일일히 정보를 수정해줘야 한다...! ㅜ

이렇게 회원정보를 수정해도 게시글의 이미지는 바뀌지 않는다ㅜㅜ

회원정보 수정 시 게시글, 댓글에 반영

구현해야 할 로직은 다음과 같다.

  • 회원정보 수정 시 유저가 작성한 게시글 찾기
  • 찾은 게시글에서 유저의 닉네임과 이미지를 변경
  • 유저가 작성한 댓글 찾기
  • 찾은 댓글에서 유저의 닉네임과 이미지를 변경

유저가 작성한 게시글(혹은 댓글) 인덱스를 찾고, 그 인덱스에 해당하는 게시글(혹은 댓글)의 정보를 수정하는 것으로 로직을 구현했다.

여기서 특정 값에 해당하는 모든 요소의 인덱스를 찾을 수 있는 배열의 내장 method가 있는지 확인을 했으나, 아쉽게도 찾지 못한건지 없는건지 사용을 못했다.

따라서 직접 모든 인덱스를 구하는 로직을 짰다.

Array.prototype.forEach를 통해, 만족하는 것의 index로 게시글(혹은 댓글) 배열 속 정보를 수정으로 구현을 했다.

코드는 다음과 같다.

//유저가 작성한 글 유저이미지, 닉네임 수정
posts.forEach((post, index) => {
  if (post.userId === userId) {
	posts[index].nickname = nickname
	posts[index].userImage = profile_image
  }
})

//유저가 작성한 댓글 유저이미지, 닉네임 수정
comments.forEach((comment, index) => {
  if (comment.userId === userId) {
	comments[index].nickname = nickname
	comments[index].profile_image = profile_image
  }
})

이렇게 한다면 유저 정보를 수정할 때, 같이 게시글과 댓글 속 유저 이미지와 닉네임이 수정된다.

코드 문제점

만약 위와 같이 코드를 작성할 경우, posts나 comments의 길이가 길어질 수록 비효율적일 것이라고 생각한다.
그 이유는 모든 게시글(혹은 댓글)을 하나하나씩 조건에 만족하는지 검사하고, 수정을 하기 때문이다.

공부를 더 하고 리팩토링으로 효율성을 높여보도록 하겠다.

profile
'◡'✿ 꿈을 찾아가보자고~ '◡'✿

0개의 댓글