linq.js join with two json

159 Views Asked by At

I have two json data

var orders = [
   {seller: "Test1", sell_count: 5, sell_amount: 1500},
   {seller: "Test2", sell_count: 2, sell_amount: 7500}
];
var views = [
   {seller: "Test1", pc_view: 123, mobile_view: 87},
   {seller: "Test2", pc_view:56, mobile_view:23},
   {seller: "Test3", pc_view: 13, mobile_view:7}
];

using linq.js how to join like below

result = [
    {seller: "Test1", view_count : 210, sell_count: 5, sell_amount: 15000},
    {seller: "Test2", view_count : 79, sell_count: 2, sell_amount: 7500},
    {seller: "Test3", view_count : 20, sell_count: 0, sell_amount: 0}
]

please help me!

1

There are 1 best solutions below

0
Jeff Mercado On

There isn't a builtin way to perform a full outer join so you'll have to replicate it. There's many ways this could be achieved, here's one.

var result = Enumerable.From(orders).Concat(views).Select("$.seller").Distinct().OrderBy()
    .Let(ks => {
        var os = Enumerable.From(orders).ToDictionary("$.seller");
        var vs = Enumerable.From(views).ToDictionary("$.seller");
        return ks.Select(k => {
            var o = os.Get(k) || {};
            var v = vs.Get(k) || {};
            return {
                seller: o.seller || v.seller,
                view_count: v.pc_view + v.mobile_view || 0,
                sell_count: o.sell_count || 0,
                sell_amount: o.sell_amount || 0
            };
        });
    });