Ryan Yiada
Ryan Yiada

Reputation: 4769

how to get difference item between two array object?

Here I have two array,but they are not the simple array.See below:

var a = [{"id":1,"in":1,"num":3000},{"id":2,"in":1,"num":1500},{"id":3,"in":1,"num":1000}]
var b = [{"id":1,"in":0,"num":1000},{"id":2,"in":0,"num":1000}]

for (var i = a.length - 1; i >= 0; i--) {
     for (var j =b.length - 1; j >= 0; j--) {
        if( a[i]['id'] == b[j]['id']){
             a[i]['rest'] = a[i]['num'] - b[j]['num']
         }
      }
 }
 console.log(a)

but I cannot get the id 3, because id 3 was not in b array. Please help.

here is the answer i want

a = [
   {"id":1,"in":1,"num":3000,"rest":2000},
   {"id":2,"in":1,"num":1500,"rest":500},
   {"id":3,"in":1,"num":1000,"rest":1000}
]

thk

Upvotes: 0

Views: 85

Answers (2)

Kyojimaru
Kyojimaru

Reputation: 2724

you can add some variable for flag to know whether you have a same id or not, here's an example with your code

var flag;
var a = [{"id":1,"in":1,"num":3000},{"id":2,"in":1,"num":1500},{"id":3,"in":1,"num":1000}]
var b = [{"id":1,"in":0,"num":1000},{"id":2,"in":0,"num":1000}]

for (var i = a.length - 1; i >= 0; i--)
    flag = false;
    for (var j =b.length - 1; j >= 0; j--) {
        if( a[i]['id'] == b[j]['id']){
            a[i]['rest'] = a[i]['num'] - b[j]['num']
            flag = true;
        }
    }
    if(!flag) {
        a[i]['rest'] = a[i]['num']
    }
}

Upvotes: 1

fast
fast

Reputation: 885

So you want to substract the 'num' in b from the corresponding 'num' in a for every element of a? Than just iterate over a and check if it is contained also in b:

var a = [{"id":1,"in":1,"num":3000},{"id":2,"in":1,"num":1500},{"id":3,"in":1,"num":1000}]
var b = [{"id":1,"in":0,"num":1000},{"id":2,"in":0,"num":1000}]

for (var i = a.length - 1; i >= 0; i--) {
  a[i]['rest'] = a[i]['num'];
  for (var j =b.length - 1; j >= 0; j--) {
    if( a[i]['id'] == b[j]['id']){
     a[i]['rest'] = a[i]['num'] - b[j]['num'];
     break;
    }
  }
}

Upvotes: 1

Related Questions