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

객체 배열 내에서 유사한 숫자 값 합계 - JavaScript

<시간/>

다음과 같은 객체 배열이 있다고 가정해 보겠습니다. -

const arr = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 151},
   {"firstName":"Anna", "value": 200},
   {"firstName":"Peter", "value": 22},
   {"firstName":"Anna","value": 60}
];

우리는 그러한 배열 하나를 취하고 firstName 속성에 대해 유사한 값을 갖는 모든 객체의 value 속성을 결합하는 JavaScript 함수를 작성해야 합니다.

따라서 위의 배열의 경우 출력은 다음과 같아야 합니다. -

const output = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 173},
   {"firstName":"Anna", "value": 260}
];

각 객체에 대해 유사한 객체를 재귀적으로 찾습니다.

(이 질문의 컨텍스트에 대한 유사한 개체는 유사한 firstName 값을 가진 개체입니다).

그런 다음 하나의 객체에 value 속성을 추가하고 배열에서 다른 객체를 삭제합니다. 이것은 배열의 끝에 도달할 때까지 수행됩니다. 도달하면 배열을 원하는 배열로 줄였을 것입니다.

예시

다음은 코드입니다 -

const arr = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 151},
   {"firstName":"Anna", "value": 200},
   {"firstName":"Peter", "value": 22},
   {"firstName":"Anna","value": 60}
];
const sumSimilar = arr => {
   const res = [];
   for(let i = 0; i < arr.length; i++){
      const ind = res.findIndex(el => el.firstName === arr[i].firstName);
      if(ind === -1){
         res.push(arr[i]);
      }else{
         res[ind].value += arr[i].value;
      };
   };
   return res;
};
console.log(sumSimilar(arr));

출력

이것은 콘솔에 다음과 같은 출력을 생성합니다 -

[
   { firstName: 'John', value: 89 },
   { firstName: 'Peter', value: 173 },
   { firstName: 'Anna', value: 260 }
]