>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 여러 속성으로 개체를 그룹화하고 값을 집계하는 방법은 무엇입니까?

JavaScript에서 여러 속성으로 개체를 그룹화하고 값을 집계하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 06:07:021037검색

How to Group Objects by Multiple Properties and Aggregate Values in JavaScript?

여러 속성으로 객체 그룹화 및 값 집계

여러 속성으로 배열의 객체를 그룹화하는 작업에서 일반적인 요구 사항은 다음과 같습니다. 이러한 속성별로 그룹화할 뿐만 아니라 특정 개체 속성의 값을 요약합니다. 그러나 단순히 모든 중복 항목을 2차원 배열에 중첩하는 솔루션은 충분하지 않습니다.

문제 설명

모양과 모양별로 그룹화해야 하는 개체의 배열을 생각해 보세요. 색상. 이 배열의 개체는 모양과 색상이 모두 동일한 경우에만 중복된 것으로 간주됩니다. 중복 개체의 경우 사용된 값과 인스턴스 값을 합산하고 중복 항목을 제거하여 고유한 모양과 색상을 가진 간결한 개체 목록을 만들어야 합니다.

해결책

이 문제를 효과적으로 해결하기 위해 발견된 모양 및 색상 조합을 추적하는 도우미 개체와 함께 Array#reduce 메서드를 활용할 수 있습니다.

const arr = [
  { shape: 'square', color: 'red', used: 1, instances: 1 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
  { shape: 'circle', color: 'blue', used: 0, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 4 },
  { shape: 'circle', color: 'red', used: 1, instances: 1 },
  { shape: 'circle', color: 'red', used: 1, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 5 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
];

const helper = {};
const result = arr.reduce((r, o) => {
  const key = `${o.shape}-${o.color}`;

  if (!helper[key]) {
    // If it's a unique combination, add to the helper and result array
    helper[key] = Object.assign({}, o);
    r.push(helper[key]);
  } else {
    // If it's a duplicate, update the values in the helper
    helper[key].used += o.used;
    helper[key].instances += o.instances;
  }

  return r;
}, []);

console.log(result);

출력:

[
  { shape: "square", color: "red", used: 5, instances: 3 },
  { shape: "circle", color: "red", used: 2, instances: 1 },
  { shape: "square", color: "blue", used: 11, instances: 9 },
  { shape: "circle", color: "blue", used: 0, instances: 0 }
]

이 솔루션은 개체를 모양과 색상별로 효율적으로 그룹화하고, 중복 개체에 대한 사용 및 인스턴스 값을 집계하고, 나머지 중복 항목을 제거하여 원하는 결과를 얻습니다.

위 내용은 JavaScript에서 여러 속성으로 개체를 그룹화하고 값을 집계하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.