2016-11-10 17 views
0

次の生データがあります。このデータを集計して、それぞれの場所のトータル、おそらく総計のオブジェクトを返したいと思います。 A 760アンダースコアJsを使用したネストされたデータの集約

122あろう

場所(costPrice)* 4(量)= 488(ALCATEL 5054)

136 * 2 = 272(DESIRE 530)

場所B 300

104 * 2 = 208(6060 ALCATEL)あろう

92 * 1 = 92(ALCATEL 7972)

グランド合計:1060

どのように私は、アンダースコアJSを使用して、次のデータ変換を行うことができますか?

私はこのplunkerを始めたが、私は正しい方向に向かっていないと思う... http://plnkr.co/edit/ThvyQB3tm5KFuE6oLM1n?p=preview

生データ:

[{ 
    "location": { 
     "id": 82008938, 
     "name": "LOCATION A", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214643353, 
     "name": "ALCATEL 5054", 
     "costPrice": 122, 
     "wholesalePrice": 127 
    }, 
    "order": "5698", 
    "sim": [358848659378096] 
}, { 
    "location": { 
     "id": 82009723, 
     "name": "LOCATION B", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214648136, 
     "name": "ALCATEL 6060", 
     "costPrice": 104, 
     "wholesalePrice": 120 
    }, 
    "order": "5698", 
    "sim": [358899043576662] 
}, { 
    "location": { 
     "id": 82008938, 
     "name": "LOCATION A", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214643353, 
     "name": "ALCATEL 5054", 
     "costPrice": 122, 
     "wholesalePrice": 127 
    }, 
    "order": "5698", 
    "sim": [358885796982333] 
}, { 
    "location": { 
     "id": 82009723, 
     "name": "LOCATION B", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214648136, 
     "name": "ALCATEL 6060", 
     "costPrice": 104, 
     "wholesalePrice": 120 
    }, 
    "order": "5698", 
    "sim": [358817108459730] 
}, { 
    "location": { 
     "id": 82008938, 
     "name": "LOCATION A", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214643353, 
     "name": "ALCATEL 5054", 
     "costPrice": 122, 
     "wholesalePrice": 127 
    }, 
    "order": "5698", 
    "sim": [358879619289409] 
}, { 
    "location": { 
     "id": 82008938, 
     "name": "LOCATION A", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214643353, 
     "name": "ALCATEL 5054", 
     "costPrice": 122, 
     "wholesalePrice": 127 
    }, 
    "order": "5698", 
    "sim": [358842400527891] 
}, { 
    "location": { 
     "id": 82009723, 
     "name": "LOCATION B", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214647597, 
     "name": "ALCATEL 7972", 
     "costPrice": 92, 
     "wholesalePrice": 95 
    }, 
    "order": "5709", 
    "sim": [358842726462666] 
}, { 
    "location": { 
     "id": 82008938, 
     "name": "LOCATION A", 
     "phone": "", 
     "address": "" 
    }, 
    "model": { 
     "id": 610214646606, 
     "name": "DESIRE 530", 
     "costPrice": 136, 
     "wholesalePrice": 149 
    }, 
    "order": "5710", 
    "sim": [358840719743714, 358848337490208] 
}] 

可能な欲望の結果(と、異なるフォーマットである可能性があり同じデータと合計):

[{ 
    "location": "LOCATION A", 
    "total": 760 
}, { 
    "location": "LOCATION B", 
    "total": 300 
}] 

答えて

0
var data = [ /* raw data */ ]; 

var results = _.reduce(data, function(results, item){ 
    results[item.location.name] = (results[item.location.name]|0) + item.model.costPrice; 
    return results; 
}, {}); 

設定resultsへ:

{ 
    "LOCATION A": 624, 
    "LOCATION B": 300 
} 

(「DESIRE 530」のインスタンスが1つだけあなたの質問に提供されるサンプル・データでありますので、それは624の代わりに、760です。)

行うために使用することができ​​もありますあなたのケースでも同じこと:

var results = {}; 
_.each(data, function(item){ 
    results[item.location.name] = (results[item.location.name]|0) + item.model.costPrice; 
}); 

参考:

+0

応答をいただき、ありがとうございます。 "DESIRE 530"のインスタンスは1つしかありませんが、simの長さ(この場合は2)で価格が計算されるので、136 * 2 = 272になります。この問題を明確にしていないと申し訳ありません。しかし、私はcostPriceをitem.sim.lengthで掛けて、必要なものを得ることができました。ありがとうございました! – Ali

関連する問題