2

Here, i am trying to add 'order_total' property. I have used reduce method, if try for only arrays, the same code is working properly, but when i implemented on array of objects it is resulting NaN.

var user = {
    id: 16,
    username: 'smith',
    email: 'smith@gmail.com',
    order: [
        {
            id: 71,
            order_number: 'DCT-123',
            order_total: 12000,
        },
        {
            id: 71,
            order_number: 'DCT-345',
            order_total: 7000,
        },
        {
            id: 71,
            order_number: 'DCT-321',
            order_total: 2000,
        }
    ]
};

var result = user.order.reduce(function(a, b) {
    return a.order_total + b.order_total;
}); 

console.log(result); 
Cuong Le Ngoc
  • 11,595
  • 2
  • 17
  • 39
iamPavan
  • 255
  • 4
  • 15

2 Answers2

2

The parameter a in the reduce callback is the accumulator, not the property of the object. Refer here to learn more about reduce

var user = {
    id: 16,
    username: 'smith',
    email: 'smith@gmail.com',
    order: [
        {
            id: 71,
            order_number: 'DCT-123',
            order_total: 12000,
        },
        {
            id: 71,
            order_number: 'DCT-345',
            order_total: 7000,
        },
        {
            id: 71,
            order_number: 'DCT-321',
            order_total: 2000,
        }
    ]
};

var result = user.order.reduce(function(a, b) {
    return a+b.order_total;
},0); 

console.log(result); 
TKoL
  • 13,158
  • 3
  • 39
  • 73
ellipsis
  • 12,049
  • 2
  • 17
  • 33
1

You return a number, not an object.

var result = user.order.reduce(function(a, b) {
    //                                  ^        object
    //                                     ^     object
    return a.order_total + b.order_total;  //    number
}); 

You need a start value of zero and add the value of the property.

var user = {
    id: 16,
    username: 'smith',
    email: 'smith@gmail.com',
    order: [
        {
            id: 71,
            order_number: 'DCT-123',
            order_total: 12000,
        },
        {
            id: 71,
            order_number: 'DCT-345',
            order_total: 7000,
        },
        {
            id: 71,
            order_number: 'DCT-321',
            order_total: 2000,
        }
    ]
};

var result = user.order.reduce(function(total, a) {
    return total + a.order_total;
}, 0); 

console.log(result); 
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392