여러 속성을 기준으로 배열의 개체를 효율적으로 그룹화하고 해당 값을 요약하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-08 15:53:02
원래의
223명이 탐색했습니다.

How to efficiently group objects in an array by multiple properties and summarize their values?

배열의 여러 속성을 사용한 효율적인 개체 그룹화

배열의 개체 그룹화 작업은 단일 속성 이상으로 확장될 수 있습니다. 어떤 경우에는 그룹화를 위해 여러 속성을 고려해야 합니다. 이 시나리오에서는 맞춤형 접근 방식이 필요합니다.

모양과 색상을 기준으로 개체를 그룹화하는 문제를 해결해 보겠습니다. 목표는 모양과 색상이 동일한 개체를 그룹화하면서 사용 및 인스턴스 값을 합산하는 것입니다.

예상 동작:

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 expectedResult = [
  { 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 }
];
로그인 후 복사

주요 고려 사항 :

  • 모양과 색상의 독특한 조합을 찾아보세요
  • 동일한 조합을 가진 객체의 사용된 값과 인스턴스 값을 요약합니다.

해결책:

Array#reduce를 활용하여 다음을 수행할 수 있습니다. 모양 색상을 추적하기 위해 도우미 개체를 유지하면서 배열을 반복합니다. 조합.

각 개체에 대해:

  • 모양과 색상 속성을 기반으로 고유한 키를 구성합니다.
  • 키가 개체에서 발견되지 않은 경우 도우미 개체:

    • 현재 개체의 복사본으로 새 개체를 만듭니다. 개체.
    • 도우미 개체에 추가합니다.
    • 결과 배열에 포함합니다.
  • 키가 이미 도우미 개체:

    • 도우미의 기존 개체에 사용된 증분 및 인스턴스 값 object.

이 프로세스는 값을 누적하면서 모양과 색상이 동일한 개체를 효과적으로 그룹화합니다.

코드 조각:

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 }
];

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

  if (!helper[key]) {
    helper[key] = Object.assign({}, o);
    r.push(helper[key]);
  } else {
    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 }
]
로그인 후 복사

이 기술을 활용하면 여러 속성을 기반으로 값을 효율적으로 그룹화하고 합산할 수 있으므로 복잡한 데이터 조작 작업을 배열로 처리할 수 있습니다.

위 내용은 여러 속성을 기준으로 배열의 개체를 효율적으로 그룹화하고 해당 값을 요약하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿