filter
배열에서 오브젝트 필터링하기
filter가 없다면 아래처럼 작성해야 할 것이다.
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const femaleUsers = [];
for (let i = 0; i < users.length; i++) {
  if (users[i].gender === 'female') {
    femaleUsers.push(users[i]);
  }
}방법1. gender가 female인 배열 필터링하기
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const findFemales = function({ gender }) {
  return gender === 'female';
};
const femaleUsers = users.filter(findFemales);여기서 콜백은 3가지 파라미터를 받는다.
- The current element of the array (required)
 
- The index of the current element in the array
 
- The entire array
 
방법2. arrow function으로 작성한 심플한 버전 (⭐️추천)
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const findFemales = ({ gender }) => gender === 'female';
const femaleUsers = users.filter(findFemales);방법3. 바로 조건 정의해서 필터링
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const femaleUsers = users.filter(
   ({ gender }) => gender === 'female'
);map
많은 배열 데이터를 조작할 때 유용한 map
맵이 없다면 아래처럼 작성해야 할 것이다.
const response = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const users = [];
for (let i = 0; i < response.length; i++) {
  users.push({
    fullname: response[i].name,
    gender: response[i].gender === 'male' ? 'M' : 'F'
  });
}여기서 콜백은 3가지 파라미터를 받는다.
- The current element of the array (required)
 
- The index of the current element in the array
 
- The entire array
 
결과, 새로운 형태의 배열을 생성할때 유용하다.
const response = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const transformResponse = ({ name, gender }) => {
  return {
    fullname: name,
    gender: gender === 'male' ? 'M' : 'F'
  }
};
const users = response.map(transformResponse);Reduce
어떤 값들의 합계를 구해야할 때 유용하다.
reduce가 없다면 아래처럼 작성해야 한다.
const numbers = [1,2,3,4,5,6,7,8,9];
let summary = 0;
for (let i = 0; i < numbers.length; i++) {
  summary += numbers[i];
}reduce는 콜백으로 4개의 파라미터를 받는다.
- The accumulated value previously returned (required)
 
- The current element of the array (required)
 
- The index of the current element in the array
 
- The entire array
 
두번째 매개변수는 초기값이다. 없을 경우 배열의 첫번째 요소가 누산기의 초긱밧으로 사용되며 루프는 배열의 두번째 항목에서 시작된다. 
reduce 사용 코드
초기값 없을때
const numbers = [1,2,3,4,5,6,7,8,9];
const addNumber = (acc, number) => {
  return acc + number;
}
const summary = numbers.reduce(addNumber);초기값 있을때
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const reduceFemaleCount = (acc, user) => {
  if (user.gender === 'female') {
    return acc + 1;
  }
  return acc;
};
const femaleUsersCount = users.reduce(reduceFemaleCount, 0);리팩토링1. 디스트럭처링 활용하기 user.gender → { gender }
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const reduceFemaleCount = (acc, { gender }) => {
  if (gender === 'female') {
    return acc + 1;
  }
  return acc;
};
const femaleUsersCount = users.reduce(reduceFemaleCount, 0);리팩토링2. 삼항연산자로 코드 정리하기
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const reduceFemaleCount = (acc, { gender }) => {
  return gender === 'female' ? acc + 1 : acc;
};
const femaleUsersCount = users.reduce(reduceFemaleCount, 0);find
배열에서 value 값이 일치하는 값 찾기
const users = [
  { id: 123, name: 'George' },
  { id: 456, name: 'Georgia' }
];
const findUser = ({ id }) => id === 123; 
const user = users.find(findUser);findIndex
해당 값의 index 받아오기
const users = [
  { id: 123, name: 'George' },
  { id: 456, name: 'Georgia' }
];
const findUserIndex = ({ id }) => id === 123;
const userIndex = users.findIndex(findUserIndex);includes
예전 방법 indexOf
const numbers = [1,2,3,4,5,6,7,8,9];
const indexOf9 = numbers.indexOf(9);
if (indexOf9 !== -1) {
  console.log('9 exist');
} else {
  console.log('9 does not exist');
}includes 사용하기
const numbers = [1,2,3,4,5,6,7,8,9];
if (numbers.includes(9)) {
  console.log('9 exist');
} else {
  console.log('9 does not exist');
}some
특정 조건을 만족하는지 찾기
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const isMale = ({ gender }) => gender === 'male';
const hasMaleUsers = users.some(isMale);every
전체 조건을 만족하는지 찾기
const users = [
  { name: 'George', gender: 'male' },
  { name: 'Georgia', gender: 'female' }
];
const isFemale = ({ gender }) => gender === 'female';
const allFemales = users.every(isFemale);flat
불규칙적인 배열 하나로 만들기
const numbers = [1,2,3,[4,5],[[6,7]]];
console.log(numbers.flat());  // [1,2,3,4,5,[6,7]]
console.log(numbers.flat(1)); // [1,2,3,4,5,[6,7]]
console.log(numbers.flat(2)); // [1,2,3,4,5,6,7]
