Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

複数のフィルターJavaScriptに基づいてJSONデータから平均を計算する


このようなオブジェクトの配列があるとします-

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

そのような配列を1つ取り込むJavaScript関数を作成する必要があります。

関数は次のことを行う必要があります-

  • 繰り返しのサプライヤを1つの一意の個別のオブジェクトにグループ化します(繰り返しとは、同じ「SupplierName」フィールドと「Category」フィールドを持つオブジェクトを意味します)。
  • ポイントを合計する
  • 新しい「各オブジェクトに、そのサプライヤの平均ポイントを含む平均フィールドを追加します。

したがって、最終的に出力は次のようになります-

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

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].Average;
      }
      else { acc[name] = obj;
         acc[name].Average = 1;
         // taking 'Average' attribute as an items counter(on the first phase)
      };
      return acc;
   }, {});
   // getting "average of Points" const res = Object.keys(groups).map( name => {       groups[name].Average = Math.round(groups[name].Points/groups[name].Average);
      return groups[name];
   });
   return res;
}; console.log(JSON.stringify(groupAndAverage(arr), undefined, 4));

出力

そして、コンソールの出力は-

になります
[
   {
      "SupplierName": "John",
      "Category ": "A",
      "Points": 22,
      "Average": 6
   },
   {
      "SupplierName": "Praveen",
      "Category ": "A",
      "Points": 10,
      "Average": 5
   }
]

  1. JavaScriptのtextarea入力でJSONデータをきれいにしますか?

    このためには、JSON.parse()をJSON.stringify()と一緒に使用します。 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initialscale=1.0"> <title>Document</title> <link rel

  2. Excel で複数の基準に基づいてテーブルからデータを抽出する方法

    必要なときにデータを抽出することは、スプレッドシートを使用する主な要因であり、Excel も例外ではありません。データを Excel に表形式で保存して、それらを抽出します。今日は、複数の基準に基づいてテーブルからデータを抽出する方法を紹介します。 まず最初に、例のベースとなるデータセットについて知りましょう。 ここには、映画のリストと、ジャンルと主演俳優、およびリリース年を含むテーブルがあります。このデータセットを使用して、複数の基準に基づいてデータを取得します。 これは、物事を単純にするための基本的なテーブルであることに注意してください。実際のシナリオでは、はるかに大規模で複雑な