Computer >> Máy Tính >  >> Lập trình >> Javascript

Tính toán trung bình từ dữ liệu JSON dựa trên nhiều bộ lọc JavaScript

Giả sử, chúng ta có một mảng các đối tượng như thế này -

 const arr =[{"SupplierName":"John", "Category":"A", "Points":3}, {"SupplierName":"John", "Category":"A", "Points ":11}, {" SupplierName ":" John "," Category ":" A "," Points ":undefined}, {" SupplierName ":" John "," Category ":" B "," Points ":2}, {"SupplierName":"John", "Category":"B", "Points":6}, {"SupplierName":"Praveen", "Category":"A", "Points":3} , {"SupplierName":"Praveen", "Category":"A", "Points":7}]; 

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy.

Hàm sẽ thực hiện những việc sau -

  • Nhóm các nhà cung cấp lặp lại thành một đối tượng riêng biệt duy nhất (bằng cách lặp lại, chúng tôi muốn nói đến các đối tượng có cùng trường "Tên nhà cung cấp" và "Danh mục").
  • Cộng điểm của họ với nhau
  • Thêm "trường trung bình mới cho từng đối tượng, chứa điểm trung bình của nhà cung cấp đó.

Vì vậy, cuối cùng đầu ra sẽ giống như -

 const output =[{"SupplierName":"John", "Category":"A", "Points":14, "Average":7}, {"SupplierName":"John", "Category":"B", "Points":8, "Average":4}, {"SupplierName":"Praveen", "Category":"A", "Points":10, "Average":5}];  

Ví dụ

 const arr =[{"SupplierName":"John", "Category":"A", "Points":3}, {"SupplierName":"John", "Category":"A", "Points ":11}, {" SupplierName ":" John "," Category ":" A "," Points ":undefined}, {" 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 groups =arr.reduce ((acc, obj) => {const name =obj.SupplierName + obj.Category; if (acc [name]) {if (obj.Points) (acc [name] .Points + =obj.Points) &&++ acc [name] .A Average;} else {acc [name] =obj; acc [name] .Average =1; // lấy thuộc tính 'Average' làm bộ đếm mặt hàng (ở giai đoạn đầu)}; return acc;}, {}); // lấy "điểm trung bình" const res =Object.keys (groups) .map (name => {groups [name] .Average =Math.round (groups [name] .Points / groups [name] .Average); trả về nhóm [tên];}); trả về res;}; console.log (JSON.stringify (groupAndAverage (arr), undefined, 4)); 

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

 [{"SupplierName":"John", "Category":"A", "Points":22, "Average":6}, {"SupplierName":"Praveen", "Category":"A" , "Điểm":10, "Trung bình":5}]