Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 요소 그룹화 및 중복 계산을 위한 효율적인 알고리즘

<시간/>

객체 배열이 있습니다. 개체의 한 속성이 다른 개체의 속성과 동일한 경우 중복 항목으로 간주합니다.

이 속성으로 개체를 그룹화하고 "중복"이 발생한 횟수에 대한 정보를 저장하려고 합니다.

   X A B O
   Y X Z I
   Y X Z U
   X A B L
   Y X Z K

첫 번째 값으로 그룹화하려고 합니다.

다른 두 속성은 각 복제본에서도 동일하지만 첫 번째 값을 비교하는 것으로 충분합니다.

다음과 같은 결과를 사용자에게 표시해야 합니다. -

   Y X Z (3)
   X A B (2)

예시

이에 대한 코드는 -

const arr = [
   {x: 'x', acc: 'acc', val: 'val'},
   {y: 'y', x: 'x', z: 'z'},
   {y: 'y', x: 'x', z: 'z'},
   {x: 'x', c: 'c', val: 'val'}
];
const countOccurrence = (arr = []) => {
   const res = {};
   arr.forEach (item => {
      Object.keys( item ).forEach (prop => {
         ( res[prop] ) ? res[prop] += 1 : res[prop] = 1;
      });
   });
   return res;
}
const groupByOccurrence = (data = []) => {
   const obj = countOccurrence(data);
   const res = Object.keys ( obj ).reduce ( ( acc, val ) => {
      ( acc[obj[val]] ) ? acc[obj[val]].push ( val ) : acc[obj[val]] = [val];
      return acc;
   }, {});
   return res;
}
console.log(groupByOccurrence(arr));

출력

And the output in the console will be:
{ '1': [ 'acc', 'c' ], '2': [ 'val', 'y', 'z' ], '4': [ 'x' ] }