0

I am having an object like the below one.

let fragment = {
    "lcxsm-item-1-heading": "Romeo",
    "lcxsm-item-1-heading-1-subheading": "Lima",
    "lcxsm-item-1-heading-2-subheading": "Zero",
    "lcxsm-item-1-heading-3-subheading": "France",
    "lcxsm-item-1-heading-1-subheading-1-subitem": "Jupiter",
    "lcxsm-item-1-heading-1-subheading-2-subitem": "Sunday",
    "lcxsm-item-1-heading-1-subheading-3-subitem": "Match",

    "lcxsm-item-2-heading": "email",
    "lcxsm-item-2-heading-1-subheading": "password",
    "lcxsm-item-2-heading-2-subheading": "user",
    "lcxsm-item-2-heading-3-subheading": "Italia",

    "lcxsm-item-3-heading": "you",
    "lcxsm-item-3-heading-1-subheading": "Rome",
    "lcxsm-item-3-heading-2-subheading": "Indiana",
    "lcxsm-item-3-heading-3-subheading": "phone",
    "lcxsm-item-3-heading-1-subheading-1-subitem": "number",
    "lcxsm-item-3-heading-1-subheading-2-subitem": "mail",
    "lcxsm-item-3-heading-1-subheading-3-subitem": "id"
}

I am trying to create a function called "getObjectListWithPrefix" which gives me an output like this.

[
  {
    "main-heading": "Romeo",
    "subHeadings": [ "lima", "zero", "france" ],
    "subItems": [ "Jupiter", "Sunday", "Match" ]
  },
  {
    "main-heading": "email",
    "subHeadings": [ "password", "user", "Italia" ]
  },
  {
    "main-heading": "You",
    "subHeadings": [ "Rome", "Indiana", "phone" ],
    "subItems": [ "number", "mail", "id" ]
  }
]

I am using the function call getObjectListWithPrefix("lcxsm-item-", fragment, "-heading")only. Is it possible to loop through the object just using a prefix and suffix? Sometimes there may be heading, subheading, and sub-items for each subheading. Can someone help me ??

jamesnet214
  • 1,044
  • 13
  • 21

1 Answers1

2

At first you need to extract data from key string, then group them,

let fragment = { "lcxsm-item-1-heading": "Romeo", "lcxsm-item-1-heading-1-subheading": "Lima", "lcxsm-item-1-heading-2-subheading": "Zero", "lcxsm-item-1-heading-3-subheading": "France", "lcxsm-item-1-heading-1-subheading-1-subitem": "Jupiter", "lcxsm-item-1-heading-1-subheading-2-subitem": "Sunday", "lcxsm-item-1-heading-1-subheading-3-subitem": "Match", "lcxsm-item-2-heading": "email", "lcxsm-item-2-heading-1-subheading": "password", "lcxsm-item-2-heading-2-subheading": "user", "lcxsm-item-2-heading-3-subheading": "Italia", "lcxsm-item-3-heading": "you", "lcxsm-item-3-heading-1-subheading": "Rome", "lcxsm-item-3-heading-2-subheading": "Indiana", "lcxsm-item-3-heading-3-subheading": "phone", "lcxsm-item-3-heading-1-subheading-1-subitem": "number", "lcxsm-item-3-heading-1-subheading-2-subitem": "mail", "lcxsm-item-3-heading-1-subheading-3-subitem": "id", }

let result = [];

for (const key_str in fragment) {
    let keys = key_str.split("-");
    let titel = keys[keys.length - 1];
    let index = keys[2] - 1;
    let value = fragment[key_str];

    if (titel == "heading") {
        result[index] = { "main-heading": value }
        continue
    }

    result[index] ??= {};
    result[index][titel] ??= []
    result[index][titel].push(value)
}

console.log(result)
Nur
  • 2,361
  • 2
  • 16
  • 34