当前位置: 首页 > 知识库问答 >
问题:

前端 - 求助,数据转换,.字符串转为children格式?

卢毅
2023-05-19

有如下数据

[
  {
    "addData": "item1.child1"
  },
  {
    "addData": "item1.child2"
  },
  {
    "addData": "item1.child3"
  },
  {
    "addData": "item2"
  },
  {
    "addData": "item3"
  },
  {
    "addData": "item4.child1"
  },
  {
    "addData": "item4.child2.key1"
  },
  {
    "addData": "item4.child2.key2"
  },
  {
    "addData": "item4.child3"
  }
]

需转为下面的格式

[
  {
    "value": "item1",
    "label": "item1",
    "children": [
      {
        "value": "child1",
        "label": "child1"
      },
      {
        "value": "child2",
        "label": "child2"
      },
      {
        "value": "child3",
        "label": "child3"
      }
    ]
  },
  {
    "value": "item2",
    "label": "item2"
  },
  {
    "value": "item3",
    "label": "item3"
  },
  {
    "value": "item4",
    "label": "item4",
    "children": [
      {
        "value": "child1",
        "label": "child1"
      },
      {
        "value": "child2",
        "label": "child2",
        "children": [
          {
            "value": "key1",
            "label": "key1"
          },
          {
            "value": "key2",
            "label": "key2"
          }
        ]
      },
      {
        "value": "child3",
        "label": "child3"
      }
    ]
  }
]

大概就是' . '分割的字符串重新组成 value label 树形结构,. 字符串分割数目不固定,求大佬解惑

共有1个答案

谢烨烨
2023-05-19

使用递归就行了, 常见算法:
image.png

console.log(convertData([
    {
      "addData": "item1.child1"
    },
    {
      "addData": "item1.child2"
    },
    {
      "addData": "item1.child3"
    },
    {
      "addData": "item2"
    },
    {
      "addData": "item3"
    },
    {
      "addData": "item4.child1"
    },
    {
      "addData": "item4.child2.key1"
    },
    {
      "addData": "item4.child2.key2"
    },
    {
      "addData": "item4.child3"
    }
  ]))
  function convertData (originalData) {
    const result = [];

    for (let item of originalData) {
      const parts = item.addData.split('.');
      let parent = result;
      // 遍历该项数据的所有部分
      for (let part of parts) {
        // 在当前父级节点的子节点中查找该部分
        let current = parent.find(node => node.value === part);

        if (!current) {
          // 如果该部分不存在,则创建新的节点,并将其添加到当前父级节点的子节点中
          current = {
            value: part,
            label: part
          };

          parent.push(current);
        }
        // 更新父级节点引用为当前节点,继续处理下一个部分
        parent = current.children || (current.children = []);
      }
    }

    return result;
  }
 类似资料:
  • 我正在使用Schembuf在带有套接字的计算机之间更改数据。要传输数据,我使用以下内容: 然而,我注意到Protobuf无法读取任何非int类型的接收数据(它将其分配给0)。果不其然,如果我不使用套接字,但试图用相同的代码片段返回消息,则会发生相同的情况: 我还指出: 那么,为什么我不能正确地将数据转换回字符串呢?如果这是一个参考问题,为什么protobuf不能读取字符数组数据或从字符数组转换的字

  • 问题内容: 我正在通过这样的套接字接收字符串 我想将其转换回数组。我尝试使用 但是它将数组内的数组分割开。 我将如何将字符串转换为数组? 问题答案: 使用比。从文档: 31.2。ast —抽象语法树¶ 安全地评估表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,数字,元组,列表,字典,布尔值和无。 这可用于安全地评估包含来自不受信任来源的Py

  • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

  • 问题内容: MySQL是否会自动将字符串转换为数字值? 转换如何进行? ‘1234’= 1234吗? ‘1abc’= 1? ‘文本’= 1? 给定那是bigint类型的,该查询将如何解释? 问题答案: 前三个问题的答案是:是,是和否。 当字符串转换为数字时,它将成为value 。 描述类型转换的文档在这里。 对于您的查询: 该摘录摘自文档: 在所有其他情况下,将参数作为浮点数(实数)进行比较。 换

  • 我有一个购物车php页面,在那里我显示客户端产品。在同一页中,我有一个表单,可以将客户的个人详细信息(如姓名、姓氏等)以及产品信息(如产品名称、数量等)直接发送到我的电子邮件地址。 现在,问题是,当我发送表单时,在我的电子邮件地址上,我收到了所有的信息,但没有产品细节,例如在订单电子邮件中的产品名称字段,我有ARRAY。 我看到将数组转换为字符串时出现问题,但我不知道如何转换,我尝试了几个示例,但

  • 我有一个pandas数据框架,其中混合了数据类型(DType),我希望将其转换为numpy结构化数组(或记录数组,在本例中基本相同)。对于纯数字数据帧,使用方法很容易做到这一点。我还需要将pandas列的数据类型转换为字符串而不是对象,以便使用numpy方法,该方法将数字和字符串输出到二进制文件,但不会输出对象。 简而言之,我需要将带有的panda列转换为字符串或unicode数据类型的numpy