2

After doing some operations with LoDash from an initial array, I end up with the following:

[
  {number:3, product:'apple'},
  {number:2, product:'apple'},
  {number:4, product:'pear'}
]

How could I manipulate it to end up with:

[
  {number:5, product:'apple'},
  {number:4, product:'pear'}
]

This is the original code, just in case:

$scope.data = [
  {
    date:'date',
    products: [
      {
        number: 3,
        product: 'Apple'
      },
      {
        number: 4,
        product: 'Pear'
      }
    ]
  },
  {
    date:'date',
    products: [
      {
        number: 2,
        product: 'Apple'
      }
    ]
  }
]


const grouped = _.groupBy($scope.data, function(el){
  return moment(el.date).format('dddd, D [de] MMMM');
});

const result = _.map(grouped, (value, date) => ({
    date: date,
    products: _.flatMap(value, el => el.products)
}));

1 Answer 1

4

You have to add separate grouping by products, very similar as grouping by date

// Function for grouping unique products with sum of units
function sumProductsUnits(products) {
    var productGroups = _.groupBy(products, productObj => productObj.product);

    return _.map(productGroups, (productGroup, productName) => ({
        product: productName,
        units: productGroup.reduce((sum, val) => sum + val.number, 0)
    }))
}

And the usage is like here:

const result = _.map(grouped, (value, date) => ({
    date: date,
    products: sumProductsUnits(
        _.flatMap(value, el => el.products)
    )
}));

Result:

[
   {
      "date":"date",
      "products":[
         {
            "product":"Apple",
            "units":5
         },
         {
            "product":"Pear",
            "units":4
         }
      ]
   }
]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

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.