2017-05-22 3 views
-1

いくつかの操作の後に私の応答です。 empidに基づいて、私は地区、製品をグループ化し、SMSとwhatsappの数を取得したい。JavaScriptで共通のプロパティをグループ化するにはどうすればよいですか?

[ 
    { 
    "_id": { 
     "empid": "sindhu", 
     "district": "Hyderabad", 
     "product": "Fair Fertilizers" 
    }, 
    "sms": 1 
    }, 
    { 
    "_id": { 
     "empid": "nagaraju", 
     "district": "Guntur", 
     "product": "Fair Fertilizers" 
    }, 
    "sms": 2 
    }, 
    { 
    "_id": { 
     "empid": "sindhu", 
     "district": "Hyderabad", 
     "product": "Fair Fertilizers" 
    }, 
    "whatsapp": 2 
    }, 
    { 
    "_id": { 
     "empid": "sindhu", 
     "district": "Krishna", 
     "product": "Fair Fertilizers" 
    }, 
    "whatsapp": 2 
    } 
] 

上記のデータは、次のような形式で入力します。

[ 
    { 
    "sindhu":[ 
     { 
      "district": "Hyderabad", 
      "product": "Fair Fertilizers", 
      "sms": 1, 
      "whatsapp": 2 
     }, 
     { 
      "district": "Krishna", 
      "product": "Fair Fertilizers", 
      "whatsapp": 2 
     }, 
    ] 
    }, 
    { 
    "nagaraju" : [ 
     { 
      "district": "Guntur", 
      "product": "Fair Fertilizers", 
      "sms": 2 
     } 
    ] 
    } 
] 

私は以下のコードを試してみたいです。しかし、私はそれを得ていませんでした。

var groups = Object.create(null); 
for (var i = 0; i < allTools.length; i++) { 
    var item = allTools[i]; 
    if(!groups[item._id]) { 
     groups[item._id] = []; 
    } 
    groups[item._id].push({ 
     district: item.district, 
     product: item.product, 
     sms: item.sms, 
     whatsapp: item.whatsapp, 
     mailing: item.mailing, 
     telecalling: item.telecalling, 
     enquiry: item.enquiry 
    }); 
} 
var data = []; 
for (var x in groups) { 
    var obj = {}; 
    obj[x] = groups[x]; 
    data.push(obj); 
} 
+4

の可能性のある重複した[オブジェクトのjavascript配列にGROUPBYするための最も効率的な方法は何ですか?](https://stackoverflow.com/questions/14446511/what-is-the一番効率的なメソッドからグループへのオブジェクトの配列) – Rajesh

+1

いくつかの考えを試してみてください。 –

+0

@ NinaScholz、私は質問を編集しました。それを調べてください。 –

答えて

1

あなたは、キーを使用するためだけでなく、一部の結果を維持するために働くハッシュテーブルを使用して結果の配列に必要な参照を構築するための反復ネストされたアプローチを使用することができます。

グループ化キーのすべてのレベルが異なる必要があり、empiddistrictの必要性が異なるため、単純化が不可能です。

var data = [{ _id: { empid: "sindhu", district: "Hyderabad", product: "Fair Fertilizers" }, sms: 1 }, { _id: { empid: "nagaraju", district: "Guntur", product: "Fair Fertilizers" }, sms: 2 }, { _id: { empid: "sindhu", district: "Hyderabad", product: "Fair Fertilizers" }, whatsapp: 2 }, { _id: { empid: "sindhu", district: "Krishna", product: "Fair Fertilizers" }, whatsapp: 2 }], 
 
    values = ['sms', 'whatsapp'], 
 
    result = [], 
 
    hash = { _: result }; 
 

 
data.forEach(function (o) { 
 
    var temp = {}, 
 
     reference = hash; 
 

 
    if (!reference[o._id.empid]) { 
 
     reference[o._id.empid] = { _: [] }; 
 
     temp[o._id.empid] = reference[o._id.empid]._; 
 
     reference._.push(temp); 
 
    } 
 
    reference = reference[o._id.empid]; 
 

 
    if (!reference[o._id.district]) { 
 
     reference[o._id.district] = { district: o._id.district, product: o._id.product }; 
 
     reference._.push(reference[o._id.district]); 
 
    } 
 
    reference = reference[o._id.district]; 
 

 
    values.forEach(function (k) { 
 
     if (k in o) { 
 
      reference[k] = o[k]; 
 
     } 
 
    }); 
 
}); 
 

 
console.log(result); 
 
console.log(hash);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題