코딩기록

[88] countCompletedTodos / 객체배열에서 특정 키의 값만 모두 더하기, true만 합산, 고차배열함수 map, reduce, filter 그리고 for문 총합 본문

프론트/JS)코딩테스트

[88] countCompletedTodos / 객체배열에서 특정 키의 값만 모두 더하기, true만 합산, 고차배열함수 map, reduce, filter 그리고 for문 총합

뽀짝코딩 2024. 8. 8. 21:02
728x90

문제

 

todos 배열에서 완료(completed: true)한 할일의 갯수를 구해 반환한다.

  • for 문, for…in 문, for…of 문, Array#forEach는 사용하지 않는다.
  • todos 배열을 변경하지 않는다.
const countCompletedTodos = 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(countCompletedTodos(todos)); // 1

 

 


풀이

1번풀이 - map, reduce

1). map으로 배열을 돌아 coompleted만 뽑아서 배열로 만들고

2). 누적 합산하는 reduce로 총 합산을 반환 한다.

true는 1 false는 0이라 true만 합산됨.

 

 

2번풀이- filter

=>수정

최종 코드

todo의 completed만 가지고 필터해서 길이를 반환한다.

 

// [88]
 
 // 1-1. map, reduce
const countCompletedTodos = todos88 => {
   const completedNum = todos88.map(value => value.completed);
  // console.log(completedNum);  // [ false, true, false ]
   return completedNum.reduce((sum, n) =>  sum + n);  // 1
}  

  // 1-2.
   const countCompletedTodos = todos88 => 
           todos88.map(value => value.completed).reduce((sum, n) =>  sum + n);  // 1
  
-----------------------------------------------
  
  // 2. filter 
  const countCompletedTodos = todos88 => todos88.filter(todo => todo.completed).length;   



const todos88 = [
  { id: 3, content: 'HTML', completed: false },
  { id: 2, content: 'CSS', completed: true },
  { id: 1, content: 'Javascript', completed: false }
];
console.log(countCompletedTodos(todos)); // 1

 

 

 

3번풀이 - for문

// for문 풀이-true 갯수 구하기
// 따로 todos.completed를 변수에 담지 않았을때.
const toggleCompletedAll = todos => {
  let count = 0;
  for (let i = 0; i < todos.length; i++) {
    if (todos[i].completed) {
      count++;
    }
  }
  return count;
};


const todos = [
  { id: 3, content: 'HTML', completed: false },
  { id: 2, content: 'CSS', completed: true },
  { id: 1, content: 'Javascript', completed: false }
];
console.log(toggleCompletedAll(todos)); // 1

 

 

 

 

반응형
Comments