Javascript 如何将一个数据集递归转换为另一个数据集?

Javascript 如何将一个数据集递归转换为另一个数据集?,javascript,Javascript,给出了以下数据,这些数据是我从api获得的,并且偶尔会被修改 const data = [ { name: "BG", latest: false, dir: true, etag: null, objectName: "BG", size: 0, lastModified: null, storageClass: null, versionId: null, childI

给出了以下数据,这些数据是我从api获得的,并且偶尔会被修改

const data = [
  {
    name: "BG",
    latest: false,
    dir: true,
    etag: null,
    objectName: "BG",
    size: 0,
    lastModified: null,
    storageClass: null,
    versionId: null,
    childItems: [
      {
        etag: '"13dda89d102a62beb58c57a9477b252c"',
        objectName: "BG/item.xml",
        size: 12763,
        lastModified: "2020-11-17T13:13:34.735Z",
        storageClass: "STANDARD",
        versionId: null,
        childItems: null,
        name: "item.xml",
        latest: false,
        dir: false,
      },
      {
        etag: '"5baf1d6bcccc266bfc76cbe36724bd99"',
        objectName: "BG/item.xml",
        size: 17856,
        lastModified: "2020-11-17T13:13:25.796Z",
        storageClass: "STANDARD",
        versionId: null,
        childItems: null,
        name: "item.xml",
        latest: false,
        dir: false,
      },
    ],
  },
  {
    name: "OTHER",
    latest: false,
    dir: true,
    etag: null,
    objectName: "OTHER",
    size: 0,
    lastModified: null,
    storageClass: null,
    versionId: null,
    childItems: [
      {
        etag: '"ab37611f0b217b71804da19d9111bddd"',
        objectName: "OTHER/item.xml",
        size: 3953,
        lastModified: "2020-11-18T09:12:25.634Z",
        storageClass: "STANDARD",
        versionId: null,
        childItems: null,
        name: "item.xml",
        latest: false,
        dir: false,
      },
      {
        name: "MORE",
        latest: false,
        dir: true,
        etag: null,
        objectName: "OTHER/MORE/",
        size: 0,
        lastModified: null,
        storageClass: null,
        versionId: null,
        childItems: [
          {
            etag: '"aea98cd3b3aea692475c329d79c9e7aa"',
            objectName: "OTHER/MORE/item.backup",
            size: 573934,
            lastModified: "2020-11-18T09:45:08.986Z",
            storageClass: "STANDARD",
            versionId: null,
            childItems: null,
            name: "item.backup",
            latest: false,
            dir: false,
          },
          {
            etag: '"1a36b1f644f71a2f62f9c347da5fc381"',
            objectName: "OTHER/MORE/data.txt",
            size: 1045,
            lastModified: "2020-11-18T09:45:08.622Z",
            storageClass: "STANDARD",
            versionId: null,
            childItems: null,
            name: "data.txt",
            latest: false,
            dir: false,
          },
        ],
      },
    ],
  },
];
我需要将其转换为以下内容

[
  {
    label: "BG",
    children: [
      {
        label: "item.xml",
        data: "BG/item.xml",
      },
      {
        label: "item.xml",
        data: "BG/item.xml",
      },
    ],
  },
  {
    label: "OTHER",
    children: [
      {
        label: "item.xml",
        data: "OTHER/item.xml",
      },
      {
        label: "MORE",
        children: [
          {
            label: "item.backup",
            data: "OTHER/MORE/item.backup",
          },
          {
            label: "data.txt",
            data: "OTHER/MORE/data.txt",
          },
        ],
      },
    ],
  },
];
标准是当对象的
dir
属性为true时,获取
name
并将其分配给
childItem
属性中的子对象的
label
属性,获取
name
objectName
属性的值


这对我来说是一项很难推理的任务,我提前感谢您的帮助

迭代数据项。对于每个项目,获取标签并选中
dir
;如果
true
,则递归处理子级,否则获取数据

constprocessitems=items=>items.map(item=>{
常数结果={
标签:item.name,
};
如果(项目目录){
results.children=processItems(item.childItems);
}
否则{
results.data=item.objectName;
}
返回结果;
};
const results=processItems(数据);

谢谢您的回答。我更正了代码中的详细信息,但现在我想我得到了预期的结果