I am trying to merge some JSON data sets BY key value WHILE including duplicate values WHERE the key matches.
I have tried this quite a bit now but can't seem to produce the object that I need.
Object 1
[
  {"userId":"1",
   "email":"email1@gmail.com"
  },
  {"userId":"2",
   "email":"email2@gmail.com"
  }
]
Object 2
[
  {"id":"1abc",
   "listingId":"4def",
   "userId":"2"
  },
  {"id":"2abc",
   "listingId":"2def",
   "userId":"1"
  },
  {"id":"3abc",
   "listingId":"3def",
   "userId":"2"
  }
]
I need to merge these objects in a way that looks like this:
Desired Output
[
  {"id":"1abc",
   "listingId":"4def",
   "userId":"2",
   "email":"email2@gmail.com"
  },
  {"id":"2abc",
   "listingId":"2def",
   "userId":"1",
   "email":"email1@gmail.com"
  },
  {"id":"3abc",
   "listingId":"3def",
   "userId":"2",
   "email":"email2@gmail.com"
  }
]
Problems I am Experiencing
I am able to merge the data sets successfully using a function that looks like this:
function merge(a, b, key) {
    function x(a) {
        a.forEach(function (b) {
            if (!(b[key] in obj)) {
                obj[b[key]] = obj[b[key]] || {};
                array.push(obj[b[key]]);
            }
            Object.keys(b).forEach(function (k) {
                obj[b[key]][k] = b[k];
            });
        });
    }
    var array = [],
        obj = {};
    x(a);
    x(b);
    return array;
}
https://stackoverflow.com/a/35094948/1951144
But it produces results that look like this:
[
  {"id":"1abc",
   "listingId":"4def",
   "userId":"2",
   "email":"email2@gmail.com"
  },
  {"id":"2abc",
   "listingId":"2def",
   "userId":"1",
   "email":"email1@gmail.com"
  }
]
Is there a way to use the above function WHILE keeping AND including the duplicate values where my keys match?
 
     
    