JSON.stringify(item.options) 중복 키 생성 문제

요약

장바구니 아이템 중복 판단을 위해 JSON.stringify(item.options)를 키로 사용했는데, 옵션 배열이나 라벨 순서가 달라지면 동일 옵션임에도 다른 문자열이 생성되어 중복 판별이 실패했다.


상세

1. 무엇을 했는가

2. 문제점

3. 원인

4. 해결 방안

  1. 옵션과 라벨을 정렬한 뒤 직렬화

    function generateOptionsKey(options: CartOption[]) {
      const sorted = options
        .map(opt => ({ ...opt, labels: [...opt.labels].sort() }))
        .sort((a, b) => a.optionId - b.optionId);
      return JSON.stringify(sorted);
    }
    
  2. addItem·removeItem·updateQuantity 등 모든 비교에 generateOptionsKey() 적용

  3. 간단한 테스트 스크립트로 “순서 바뀐 옵션” 케이스 검증


느낀 점