【问题标题】:sorting an object elements by matching prefix通过匹配前缀对对象元素进行排序
【发布时间】:2021-08-16 04:04:18
【问题描述】:

我有一个像下面这样的对象。

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"
}

我正在尝试创建一个名为“getObjectListWithPrefix”的函数,它会为我提供这样的输出。

[
  {
    "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" ]
  }
]

我正在使用函数调用 getObjectListWithPrefix("lcxsm-item-", fragment, "-heading")仅。是否可以仅使用前缀和后缀遍历对象?有时每个子标题可能有标题、副标题和子项目。有人可以帮我吗??

【问题讨论】:

  • 在您尝试过的问题中包含代码

标签: javascript arrays json sorting object


【解决方案1】:

首先你需要从key string中提取数据,然后将它们分组,

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多