일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 시퀄 문법
- 단어 제거
- 깃 토큰 만료
- 문자열순서바꾸기
- @Moditying @Query
- 문자열 중복
- sql like연산자
- 객체를 배열로
- 우분투 시간 변경
- 레디스 확인
- js 문자열을 문자배열로
- sql 문자열 패턴 검색
- 객체의키값만 찾기
- 중복단어제거
- 중복문자제거
- indexOf()
- 배열을 객체로
- 객체의 밸류값만 찾기
- ...점점점문법
- 프론트엔드 스쿨
- lastIndexOf()
- 코딩 어?
- 재귀스왑
- 중복된 단어
- 중복 문자열
- 제로베이스
- 배엘에서 스왑
- 5.3.8 Modifying Queries
- ubuntu타임존
- 스프링 데이타 JPA
- Today
- Total
코딩기록
[87]toggleCompletedAll / 배열안 객체 요소 키의 모든 값 변경 (객체배열) 본문
문제
todos 배열의 모든 요소의 completed 프로퍼티 값을 true로 설정해 todos 배열을 반환한다.
- for 문, for…in 문, for…of 문, Array#forEach는 사용하지 않는다.
- todos 배열을 변경하지 않는다.
const toggleCompletedAll = todos => { /* Do something */ };
const todos = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
];
console.log(toggleCompletedAll(todos));
/*
[
{ id: 3, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: true }
]
*/
풀이
1번풀이
배열안에 객체 요소 키의 모든 값 변경.
원본배열
const todos87 = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
];
[ todos87 ]
배열의 첫번째 요소에 배열을 넣음.
[
[
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
]
]
[ ...todos87 ] 스프레드 문법 ( ... )
안쪽 대괄호를 없애 대괄호로 묶여져 있던 객체들의 집합을 해방시킴. => 얕은 복사. 배열안 객체를 복사
[
-> [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
-> ]
]
즉,
[ ...todos87 ] 코드는
이렇게 만듬.
[
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
]
map 자체가 새로운 배열을 반환해서 [...todos87] 로 배열을 복사하지 않아도 됨!!
1. map으로 todos87 배열을 순회하고
2. completed가 false인 객체를 모두 true로 변경한다.
// return 처럼 { } 중괄호 안에 인자로 들어간 배열 전체와, 특정 객체를 같이 써야 배열전체가 리턴된다.
리턴에 특정 객체만 쓰면 배열에 특정객체만 담겨 반환된다.
// [87]
const toggleCompletedAll = todos87 => todos87.map(todo => {
return { ...todo, completed: true}
});
//print
console.log("87>: ", toggleCompletedAll(todos87));
87>: [
{ id: 3, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: true }
]
---------------
const toggleCompletedAll = todos87 => [...todos87].map(todo => {
return {completed: true} // 특정 객체만 쓰면 특정 객체만 배열로 출력됨.
});
//print
console.log("87>: ", toggleCompletedAll(todos87));
87>: [ { completed: true }, { completed: true }, { completed: true } ]
2번풀이 - for문
// for문 풀이
const toggleCompletedAll = todos => {
let result = [];
for (let i = 0; i < todos.length; i++) {
const newCompleted = { ...todos[i], completed: true };
result.push(newCompleted)
}
return result;
};
const todos = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false }
];
/*
[
{ id: 3, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: true }
]
*/
참고
블로그 -객체 배열 요소 변경