다음과 같은 객체 배열이 있다고 가정해 보겠습니다. -
const arr =[ { "SupplierName" :"John", "Category " :"A", "Points" :3 }, { "SupplierName" :"John", "Category " :"A", "포인트 " :11 }, { "SupplierName" :"John", "Category " :"A", "Points" :정의되지 않음 }, { "SupplierName" :"John", "Category " :"B", "Points" :2 }, { "SupplierName" :"John", "Category " :"B", "Points" :6 }, { "SupplierName" :"Praveen", "Category " :"A", "Points" :3 } , { "SupplierName" :"프라빈", "카테고리" :"A", "포인트" :7 }];
이러한 배열을 취하는 JavaScript 함수를 작성해야 합니다.
함수는 다음 작업을 수행해야 합니다. -
- 반복되는 공급업체를 하나의 고유한 개별 개체로 그룹화합니다(반복한다는 것은 "SupplierName" 및 "Category" 필드가 동일한 개체를 의미함).
- 포인트 합산
- 해당 공급자의 평균 점수를 포함하는 새로운 "평균 필드"를 각 개체에 추가합니다.
따라서 최종적으로 출력은 다음과 같아야 합니다. -
const 출력 =[ { "SupplierName" :"John", "Category " :"A", "Points" :14, "Average" :7 }, { "SupplierName" :"John", "Category" :"B", "포인트":8, "평균":4 }, { "SupplierName":"프라빈", "카테고리":"A", "포인트":10, "평균":5 }];사전>예시
const arr =[ { "SupplierName" :"John", "Category " :"A", "Points" :3 }, { "SupplierName" :"John", "Category " :"A", "포인트 " :11 }, { "SupplierName" :"John", "Category " :"A", "Points" :정의되지 않음 }, { "SupplierName" :"John", "Category " :"B", "Points" :2 }, { "SupplierName" :"John", "Category " :"B", "Points" :6 }, { "SupplierName" :"Praveen", "Category " :"A", "Points" :3 } , { "SupplierName" :"Praveen", "Category " :"A", "Points" :7 }];const groupAndAverage =(arr =[]) => { const 그룹 =arr.reduce((acc, obj) => { const name =obj.SupplierName + obj.Category; if (acc[name]) { if (obj.Points) (acc[name].Points +=obj.Points) &&++acc[name].Average; } else { acc[name] =obj; acc[name].Average =1; // 'Average' 속성을 항목 카운터로 사용(첫 번째 단계에서) }; return acc; }, {}); // "평균 포인트" 얻기 const res =Object.keys(groups).map( name => { groups[name].Average =Math.round(groups[name].Points/groups[name].Average); 반환 그룹[이름]; }); 반환 해상도;}; console.log(JSON.stringify(groupAndAverage(arr), 정의되지 않음, 4));출력
콘솔의 출력은 -
[ { "SupplierName":"John", "Category ":"A", "Points":22, "Average":6 }, { "SupplierName":"Praveen", "Category ":"A" , "포인트":10, "평균":5 }]