Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 배엘에서 스왑
- 중복문자제거
- 5.3.8 Modifying Queries
- ubuntu타임존
- 중복 문자열
- 제로베이스
- sql 문자열 패턴 검색
- indexOf()
- 객체의 밸류값만 찾기
- 코딩 어?
- 중첩배열
- 깃 토큰 만료
- 단어 제거
- 중첩배열평탄화
- 프론트엔드 스쿨
- js 문자열을 문자배열로
- 레디스 확인
- 객체의키값만 찾기
- 시퀄 문법
- 재귀스왑
- sql like연산자
- 스프링 데이타 JPA
- 중복된 단어
- 우분투 시간 변경
- lastIndexOf()
- 문자열 중복
- @Moditying @Query
- ...점점점문법
- 문자열순서바꾸기
- 중복단어제거
Archives
- Today
- Total
코딩기록
[82] getValues / 배열안 객체 키로 값만 배열로 찾기 본문
728x90
문제
- todos 배열과 todos 배열의 요소인 todo 객체의 프로퍼티 키(id, content, completed) 중 하나를 문자열로 전달하면 해당 프로퍼티 키로 todos 배열의 요소를 정렬해 todos 배열을 반환한다.
- for 문, for…in 문, for…of 문, Array#forEach는 사용하지 않는다.
- todos 배열을 변경하지 않는다.
const getValues = (todos, key) => { /* Do something */ }
const todos = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false },
];
console.log(getValues(todos, 'id')); // [3, 2, 1]
console.log(getValues(todos, 'content')); // ['HTML', 'CSS', 'Javascript']
console.log(getValues(todos, 'completed')); // [false, true, false]
풀이
1번 풀이
처음에는 todos 배열의 객체 하나씩 돌아 typeof로 테이터 타입을 확인하고 숫자형, 문자형, 불린형이 인수로 들어온 'key'와 동일하면 출력하는 전략으로 갔다.
=> if 문은 통과하는데 값이 배열에 안들어 간다. 왜인지 모르겠다.
return todos.map((todo) => {
if (typeof (todo.id) === 'number') {
todo.id;
} else if (typeof (todo.content) === 'string') {
todo.content;
} else (typeof (todo.completed) === 'boolean')
todo.completed;
});
// print
[undefined, undefined, undefined]
[undefined, undefined, undefined]
[undefined, undefined, undefined]
2번 풀이
' && key === 'id' ' 추가
기존 if 문에 키로 들어오는 인자가 'id', 'content', 'completed' 가 맞는지 확인 하는 코드를 추가했다.
=> 동일하게 값이 undefined로 나온다.
3번 풀이
' 삼항연산자 '
처음 부터 삼항연산자를 시도 하고 포문도 시도했지만 자꾸 안되서 모든 값을 다 콘솔로그로 확인해봤다.
그리고 머리싸매던중 갑자기 key를 안썼다는 생각이 들었다❗❗
const valuesArray = todos.map((todo) => {
typeof (todo.id) === 'number' ? todo.id :
(typeof (todo.content) === 'string') ? todo.content :
(typeof (todo.completed) === 'boolean') ? todo.completed : todo;
// 들어오는 값 확인
console.log("todo.id: ", todo.id ); // 3, 2, 1, *3
console.log("todo: ", todo); // { id: 3, ..., ... } 객체 한줄씩 출력 *3
console.log("key>>> ", key ); // id*3, content*3, completed*3
console.log(" typeof(todo.content) ", typeof (todo.content)); // string
console.log(" typeof(todo.completed) ", typeof (todo.completed)); // boolean
});
console.log(valuesArray);
return valuesArray;
전체 코드를 보면 맨 위에 getValues 라는 함수가 있고 그 안에서 map 함수 콜백으로 코드를 쓰고 있었는데
쓰다보니 주석처리하고~ 코드가 밑으로 내려가고~ 머리가 복잡해지고~~ 해서 getValues함수의 인자로 key를 받고는
사용하지 않았다는걸 잊고있었다.
그래서 삼항연산자를 맨 아래 최종풀이코드 처럼 수정하고 아주 간단하게 끝났다.
const getValues = (todos, key) => {
const valuesArray = todos.map((todo) => {
typeof(todo.id) === 'number' ? todo.id :
(typeof(todo.content) === 'string') ? todo.content :
(typeof(todo.completed) === 'boolean') ? todo.completed : todo;
});
console.log(valuesArray);
// return valuesArray;
}
최종풀이코드
// getValues
const getValues = (todos, key) => {
//return todos.flatMap(todo => key === 'id' ? [todo.id] :
//(key === 'content' ? [todo.content]: key === 'completed' ? [todo.completed] : key) );
return todos.map(todo => key === 'id' ? todo.id :
(key === 'content' ? todo.content : key === 'completed' ? todo.completed : key));
}
const todos = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false },
];
console.log(getValues(todos, 'id')); // [3, 2, 1]
console.log(getValues(todos, 'content')); // ['HTML', 'CSS', 'Javascript']
console.log(getValues(todos, 'completed')); // [false, true, false]
*배열안 객체 찾기 [ {~~}, {~~}, {~~} ]
예제
const todos = [
{ id: 3, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 1, content: 'Javascript', completed: false },
];
1. 배열안 첫번째 객체 키 찾기
const keyId = Object.keys(todos[0])[0] //id
const keyCon = Object.keys(todos[0])[1] //content
const keyComple = Object.keys(todos[0])[2] //completed
2. 배열안 첫번째 객체 키의 값 찾기
console.log(Object.values(todos)[0].id); //3
반응형
'프론트 > JS)코딩테스트' 카테고리의 다른 글
[85] removeTodo / filter - 배열안 객체 중 인수(매개변수)와 동일한 요소 찾기 (0) | 2024.08.08 |
---|---|
[84] addTodo / ... 스프레드 문법 - 배열안 객체에 새로운 객체 추가 (0) | 2024.08.08 |
[81] render / 배열안 객체를 html로 출력 (0) | 2024.08.08 |
js 특정 객체가 배열인지 확인, 빈 배열 확인하기 (0) | 2024.08.08 |
JS강의) switch문 - 실습 (0) | 2022.01.16 |
Comments