JS map()이 하는 일

 

  • 배열의 각 요소를 하나씩 순회하면서
  • 콜백 함수가 반환한 값들로 새 배열을 만들어 반환합니다.
  • 원본 배열은(보통) 그대로이고, map() 결과는 새 배열입니다.

형태:

array.map((element, index, array) => {
  return 변환결과;
})

기본 예시 (당신 코드 설명)

$input.all().map(item => item.json)
  • $input.all() : 입력 아이템들의 배열
  • item : 각 아이템
  • item.json : 아이템 안의 json 데이터
  • 결과: item.json들만 모인 배열

최종:

{
  "data_object": {{ $input.all().map(item => item.json) }}
}

샘플 1) 특정 필드만 뽑기 (프로젝션)

입력 item.json이 이런 형태라고 가정:

{ "id": 10, "name": "kim", "age": 30 }

id와 name만 만들기:

$input.all().map(item => ({
  id: item.json.id,
  name: item.json.name,
}))

결과:

[
  { "id": 10, "name": "kim" },
  { "id": 11, "name": "lee" }
]

샘플 2) 값 가공(변환)하기

createdAt을 ISO 문자열로, name을 대문자로:

$input.all().map(item => ({
  ...item.json,
  name: (item.json.name ?? '').toUpperCase(),
  createdAt: new Date(item.json.createdAt).toISOString(),
}))

샘플 3) 조건에 따라 다른 값 넣기 (삼항 연산자)

score가 60 이상이면 pass:

$input.all().map(item => ({
  ...item.json,
  result: item.json.score >= 60 ? 'pass' : 'fail',
}))

샘플 4) index(순번) 붙이기

$input.all().map((item, idx) => ({
  index: idx + 1,
  ...item.json,
}))

샘플 5) 중첩 배열도 map()으로 변환

item.json.tags가 배열일 때:

$input.all().map(item => ({
  ...item.json,
  tags: (item.json.tags ?? []).map(t => t.trim().toLowerCase()),
}))

샘플 6) map() + filter() 조합 (자주 씀)

※ map()은 “변환”, filter()는 “걸러내기”

score 60 이상만 남기고, 필요한 형태로 변환:

$input.all()
  .filter(item => item.json.score >= 60)
  .map(item => ({
    id: item.json.id,
    score: item.json.score,
  }))

흔한 실수/주의점

  1. map()에서 return 빼먹기
array.map(x => { x + 1 }) // undefined 배열이 됨 (중괄호면 return 필요)
array.map(x => x + 1)     // OK
array.map(x => { return x + 1 }) // OK
  1. null/undefined 대비
(item.json.tags ?? []).map(...)
(item.json.name ?? '')

댓글