skip to Main Content

Hi here i am trying to manipulate one json file to below format. I am not able to think how to do that ?

The way i am thinking is not efficient thats why i need hep on this ?

Is there any easy way to do this.

Please have a look

[
 {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - EN",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "fr_FR"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "fr_FR"
      }
    ]
  },
  {
    "nid": "61629",
    "title": "K02 - Kiosk Slider - Mix",
    "itemsSlider": [
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "es_MX"
      },
      {
        "nid": "61626",
        "status": "1",
        "titleNode": "01Additional Suitcase - EN",
        "language": "en_US"
      }
    ]
  }
]

THis this the output i am expecting for:
Please have a look Is there any way to achive it?

{
  "es_MX": [
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "es_MX"
    },
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "es_MX"
    }
  ],
  "fr_FR": [
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "fr_FR"
    },
    {
      "nid": "61626",
      "status": "1",
      "titleNode": "01Additional Suitcase - EN",
      "language": "fr_FR"
    }
  ]
}

2

Answers


  1. Here you go:

    let source = [ /* your source JSON */ ];
    let result = {};
    
    for (let item of source) {
        for (let subItem of item.itemsSlider) {
            if (!result[subItem.language]) {
                result[subItem.language] = [];
            }
            result[subItem.language].push(subItem);
        }
    }
    
    Login or Signup to reply.
  2. You could use Array::reduce():

    const result = data.reduce((r, {itemsSlider}) => (itemsSlider.forEach(item => (r[item.language]??=[]).push(item)), r), {});
    
    console.log(result);
    <script>
    const data = [
     {
        "nid": "61629",
        "title": "K02 - Kiosk Slider - EN",
        "itemsSlider": [
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "en_US"
          },
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "en_US"
          }
        ]
      },
      {
        "nid": "61629",
        "title": "K02 - Kiosk Slider - EN",
        "itemsSlider": [
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "es_MX"
          },
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "es_MX"
          }
        ]
      },
      {
        "nid": "61629",
        "title": "K02 - Kiosk Slider - EN",
        "itemsSlider": [
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "fr_FR"
          },
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "fr_FR"
          }
        ]
      },
      {
        "nid": "61629",
        "title": "K02 - Kiosk Slider - Mix",
        "itemsSlider": [
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "es_MX"
          },
          {
            "nid": "61626",
            "status": "1",
            "titleNode": "01Additional Suitcase - EN",
            "language": "en_US"
          }
        ]
      }
    ]
    </script>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search