Search code examples
javascriptarraysreactjsobjectlodash

Merge nested object using Lodash


I have an object, which look like this,

{"basket":
    [
        {
            "firmId":"27150190-3aa0-4740-a859-3e215d338a2b",
            "adisyonId":"35dca2a0-2c9a-4d8d-9b0e-1e146f7b900a","productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
            "product":
                {
                    "productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
                    "productCategoryId":"8ac4cb8c-86cb-4d23-8f01-639a7f6ac1be",
                    "productCategory":null,
                    "productName":"cola",
                    "price":8.00,
                    "st":true}},

        {
            "firmId":"4ac6dd14-798a-422f-8f3e-1ed06f5e8fb7",
            "adisyonId":"35dca2a0-2c9a-4d8d-9b0e-1e146f7b900a",
            "productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
            "product":
                {
                    "productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
                    "productCategoryId":"8ac4cb8c-86cb-4d23-8f01-639a7f6ac1be",
                    "productCategory":null,
                    "productName":"tea",
                    "price":1.00,
                    "st":true}}]};

I use that lodash.js then I want it as I want it to be in the example below.

{"basket":
    [
        {
            "product":
                {
                    "firmId":"27150190-3aa0-4740-a859-3e215d338a2b",
                    "productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
                    "productCategoryId":"8ac4cb8c-86cb-4d23-8f01-639a7f6ac1be",
                    "productCategory":null,
                    "productName":"cola",
                    "price":8.00,
                    "st":true}},

        {
            "product":
                {
                    "firmId":"4ac6dd14-798a-422f-8f3e-1ed06f5e8fb7",
                    "productId":"de37dce5-f8f9-4f54-900f-fbc90659b37d",
                    "productCategoryId":"8ac4cb8c-86cb-4d23-8f01-639a7f6ac1be",
                    "productCategory":null,
                    "productName":"tea",
                    "price":1.00,
                    "st":true}}]};

I tried this,

var list = [];
_.each(this.props.basket, function (item) {
    list.push(_.omit(item, 'firmId'));
    list.push(_.flatten(_.pick(item, 'product')));
});
var result = _.flatten(list);
console.log(result);

Its above code only give that first version, so I want to merge firmId and products on one object.

Thanks,


Solution

  • Can do this as a simple map()

    const list = this.props.basket.map(({firmId, product}) => {
       product.firmId = firmId;
       return {product};
    })