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,5125 gold badges22 silver badges32 bronze badges
asked Sep 26, 2018 at 6:06
2

6 Answers 6

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);

answered Sep 26, 2018 at 6:20
Sign up to request clarification or add additional context in comments.

1 Comment

can you please show the full code. I see only ....... var UserSummary=UserDetails.map((user, index) => ({...user, ...CallSummary[index]}));
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>

answered Sep 26, 2018 at 6:12

Comments

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);
answered Sep 26, 2018 at 6:21

Comments

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:

answered Sep 26, 2018 at 6:19

3 Comments

Uncaught TypeError: UserDetails.concat(...).reduce is not a function
@JIJOMONK.A Can you create some fiddle of your code?
sorry bro its a mistake, can you please edit the answer. I will change it
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);

answered Sep 26, 2018 at 6:16

3 Comments

How to find a specific user data from this second array
It is there. You need to use find()
I have only second array and a value, no two arrays
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

answered Sep 26, 2018 at 6:17

3 Comments

Not Same as Expected Result :)
console.log() must be lowerCase:)
It works fine please check the link and paste given code. then click on run. also compare your expected result

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.