...item.json은 **객체 펼치기(스프레드)**로 “item.json이 가진 모든 필드”를 현재 새 객체에 복사해 넣는 것이고, 그 아래의 result: ...는 새로 result 필드를 추가(또는 덮어쓰기) 하는 겁니다.
$input.all().map(item => ({
...item.json,
result: item.json.score >= 60 ? 'pass' : 'fail',
}))
한 아이템 기준으로 정확히 무슨 일이 벌어지나
예를 들어 item.json이 아래라면:
{ "name": "kim", "score": 75 }
...item.json때문에 새 객체는 일단 이렇게 됩니다:
{ name: "kim", score: 75 }
- 그 다음 줄에서
result를 계산해서 붙입니다:
item.json.score >= 60→75 >= 60→true- 그래서
result: 'pass'
최종 결과 객체:
{ "name": "kim", "score": 75, "result": "pass" }
즉, item.json.score는 스프레드와 무관하게, “점(.) 접근”으로 item.json 안의 score 값을 읽어온 것뿐입니다.
핵심 규칙 1: 스프레드는 “복사”, 점 접근은 “조회”
...item.json:item.json의 키/값을 새 객체에 복사item.json.score:item.json에서score값을 읽기
핵심 규칙 2: 같은 키가 겹치면 “뒤에 있는 것이 이김(덮어씀)”
아래처럼 item.json에 이미 result가 있어도,
{ "name": "kim", "score": 75, "result": "unknown" }
코드는 result를 다시 계산해서 덮어씁니다:
({
...item.json, // result: "unknown" 포함해서 복사됨
result: item.json.score >= 60 ? 'pass' : 'fail', // 여기서 result 덮어씀
})
결과:
{ "name": "kim", "score": 75, "result": "pass" }
반대로 “기존 result를 유지하고 싶다”면 순서를 바꾸면 됩니다:
({
result: item.json.score >= 60 ? 'pass' : 'fail',
...item.json, // item.json의 result가 있으면 이게 마지막에 와서 덮어씀
})
추가 예시 1) 스프레드 없이도 가능 (필드 명시)
$input.all().map(item => ({
name: item.json.name,
score: item.json.score,
result: item.json.score >= 60 ? 'pass' : 'fail',
}))
- 필요한 필드만 골라서 만들고 싶을 때 좋습니다.
추가 예시 2) score가 없을 때 대비(기본값 처리)
score가 없으면 fail로 처리:
$input.all().map(item => ({
...item.json,
result: (item.json.score ?? 0) >= 60 ? 'pass' : 'fail',
}))
추가 예시 3) result에 “사유”도 같이 만들기
$input.all().map(item => {
const score = item.json.score ?? 0;
return {
...item.json,
result: score >= 60 ? 'pass' : 'fail',
reason: score >= 60 ? `ok(${score})` : `low(${score})`,
};
})
추가 예시 4) 등급까지 만들기 (여러 조건)
$input.all().map(item => {
const s = item.json.score ?? 0;
const grade = s >= 90 ? 'A' : s >= 80 ? 'B' : s >= 70 ? 'C' : s >= 60 ? 'D' : 'F';
return { ...item.json, grade, result: s >= 60 ? 'pass' : 'fail' };
})
원하시면 질문 하나만: item.json.score가 항상 숫자로 들어오나요, 아니면 "75" 같은 문자열로도 들어오나요? 문자열이면 비교 전에 Number(item.json.score)로 변환하는 예시도 같이 맞춰드릴게요.
댓글
댓글 쓰기