0

User Details

 var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}]

Call Details

var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}]

Expected Result

var Result=[{"UserId":1,"Name":"Vineeth","UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"Name":"Sreena","UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}]

How to get this result, my code is ,

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}]

var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}]


var UserSummary = [];
$.each(UserDetails, function(key, index) {
    $.each(CallSummary, function(key, index1) {
        if (index.UserId == index1.UserId) {
            UserSummary.push({
                UserId: index.UserId
            });
            UserSummary.push({
                Name: index.Name
            });
            UserSummary.push({
                TotalPerCalls: index1.UPerCalls
            });
            UserSummary.push({
                TotalCallTime: index1.UTotalCallTime
            });
            UserSummary.push({
                TotalPerCallTime: index1.UPerCallsTime
            });
            UserSummary.push({
                TotalAvgCallTime: index1.UAvgCallTime
            });
        }
    })
})

console.log(UserSummary);

How to solve this ???

Thank you

Nishant Dixit
  • 5,388
  • 5
  • 17
  • 29
JIJOMON K.A
  • 1,290
  • 3
  • 12
  • 29
  • Possible duplicate of [JS - Merge two array of objects based on a key](https://stackoverflow.com/questions/46849286/js-merge-two-array-of-objects-based-on-a-key) – SLePort Sep 26 '18 at 06:17
  • And may be this [link](https://stackoverflow.com/questions/42429023/how-can-i-perform-an-inner-join-with-two-object-arrays-in-javascript) – sjd Sep 26 '18 at 06:21

6 Answers6

3

You only need an iteration. By doing .map you loop through the Users and for each user, create a new object in the UserSummary array. Then inside that object you 'spread' the properties of both the UserDetails object corresponding to that user and the properties of CallSummary.

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}];
var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}];

var UserSummary=UserDetails.map((user, index) => ({...user, ...CallSummary[index]}));

console.log(UserSummary);
Cata John
  • 1,371
  • 11
  • 19
  • can you please show the full code. I see only ....... var UserSummary=UserDetails.map((user, index) => ({...user, ...CallSummary[index]})); – JIJOMON K.A Sep 26 '18 at 06:30
1

Just use Object.assign({}, index, index1) which return combined result of index and index1.

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}]

var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}]

var UserSummary = [];
$.each(UserDetails, function(key, index) {
    $.each(CallSummary, function(key, index1) {
        if (index.UserId == index1.UserId) {
            UserSummary.push(Object.assign({}, index, index1));
        }
    })
})
console.log(UserSummary);
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Nishant Dixit
  • 5,388
  • 5
  • 17
  • 29
1

You can use native functions like .concat(), .reduce() and Object.assign() to get this:

var UserDetails = [{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}];
var CallSummary = [{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}];

var result = Object.values(
               UserDetails
                .concat(CallSummary)
                .reduce((r, c) => (r[c["UserId"]] = Object.assign({}, r[c["UserId"]], c), r), [])
             );
                        
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

References:

Mohammad Usman
  • 37,952
  • 20
  • 92
  • 95
1

Please try the below code :) You need to assign the values to a temporary object and then push the object into the array.

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}];
var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}];

UserSummary=[];
        $.each(UserDetails, function(key, index) {
            $.each(CallSummary, function(key, index1) {
                if(index.UserId==index1.UserId){
                    var tempObject = {};
                    tempObject['UserId'] = index.UserId;
                    tempObject['Name'] = index.Name;
                    tempObject['TotalCalls'] = index1.TotalCalls;
                    tempObject['TotalPerCalls'] = index1.UPerCalls;
                    tempObject['TotalCallTime'] = index1.UTotalCallTime;
                    tempObject['TotalPerCallTime'] = index1.UPerCallsTime;
                    tempObject['TotalAvgCallTime'] = index1.UAvgCallTime;
                    UserSummary.push(tempObject);
                }
            })
       })

 console.log(UserSummary);
Samrat Saha
  • 585
  • 1
  • 7
  • 18
0

You need to do follow the steps like:

  1. Loop the UserDetails array to get each object in that array
  2. Then find the object in CallSummary array with matching UserId value
  3. Merge the object if the UserId is same using Object.assign()
  4. Push the new object in the array UserSummary

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}];

var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}];

var UserSummary = [];
UserDetails.forEach((userDetail) => {
  var callSummary = CallSummary.find(({UserId})=> UserId === userDetail.UserId);
  var newObj = Object.assign(userDetail, callSummary);
  UserSummary.push(newObj);
});
console.log(UserSummary);
Ankit Agarwal
  • 30,378
  • 5
  • 37
  • 62
0

It's Pretty simple: please write the logic as below

var UserDetails=[{"UserId":1,"Name":"Vineeth"},{"UserId":2,"Name":"Sreena"}];
var CallSummary=[{"UserId":1,"UPerCalls":"22 %","UTotalCallTime":"60:24 minutes","UPerCallsTime":"0 %","UAvgCallTime":"0:22 minutes"},{"UserId":2,"UPerCalls":"8 %","UTotalCallTime":"50373:16 minutes","UPerCallsTime":"50 %","UAvgCallTime":"839:33 minutes"}]
var array3 = CallSummary.filter(function(obj) { return UserDetails.indexOf(obj.UserId) == -1; });

console.log(array3);

Please see in here

saumil_
  • 304
  • 2
  • 11