javascript - 重命名对象的不定嵌套数组中的属性

标签 javascript arrays recursion

我有这个数组

[
  {
    id: "2b077c3c-9d3a-48ba-9217-f5d3d28c2dfc",
    description: "Response #1",
    user: { id: "3ae5967a-cdfa-4047-aff9-b0c95d2d4da4", name: "User" },
    responses: [
      {
        id: "69442cb1-7de7-4f2d-9c8b-d6689fa1d007",
        description: "Response #2",
        media: "b414e44f-7371-4cef-b0d9-d240e55b0ed1.jpg",
        user: { id: "3ae5967a-cdfa-4047-aff9-b0c95d2d4da4", name: "User" }
      }
    ]
  },
  {
    id: "d8271620-9937-4815-bd35-acad62d85f53",
    description: "Response #3",
    user: { id: "3ae5967a-cdfa-4047-aff9-b0c95d2d4da4", name: "User" },
    responses: [
      {
        id: "05acce0a-8f7e-4ccd-9bbc-3337e4faa8ca",
        description: "Response #4",
        user: { id: "3ae5967a-cdfa-4047-aff9-b0c95d2d4da4", name: "User" }
      }
    ]
  }
]

我想将属性重命名为

[
  {
    id: "2b077c3c-9d3a-48ba-9217-f5d3d28c2dfc",
    name: "User — Response #1",
    children: [
      {
        id: "69442cb1-7de7-4f2d-9c8b-d6689fa1d007",
        name: "User — Response #2"
      }
    ]
  },
  {
    id: "d8271620-9937-4815-bd35-acad62d85f53",
    name: "User — Response #3",
    children: [
      {
        id: "05acce0a-8f7e-4ccd-9bbc-3337e4faa8ca",
        name: "User — Response #4",
      }
    ]
  }
]

我尝试用映射和递归来解决这个问题

function mapArray(array) {
  return array.map(({ id, description, user: { name }, responses }) => {
    if (responses !== undefined) {
      return mapArray(responses);
    }

    return {
      id,
      name: `${name} — ${description}`,
      children: responses
    };
  });
}

但是如果数组变得嵌套,并且子元素未定义

[
  [
    {
      id: '69442cb1-7de7-4f2d-9c8b-d6689fa1d007',
      name: 'User — Response #2',
      children: undefined
    }
  ],
  [
    {
      id: '05acce0a-8f7e-4ccd-9bbc-3337e4faa8ca',
      name: 'User — Response #4',
      children: undefined
    }
  ]
]

请注意,响应具有不确定的深度。

我哪里搞砸了?谢谢

最佳答案

你们很接近。 if 条件内只需更改 1 行即可修复此问题。

function mapArray(array) {
  return array.map(({ id, description, user: { name }, responses }) => {
    if (responses !== undefined) {
      responses = mapArray(responses);
    }

    return {
      id,
      name: `${name} — ${description}`,
      children: responses
    };
  });
}

关于javascript - 重命名对象的不定嵌套数组中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69007232/

相关文章:

haskell - 返回列表中某个元素的所有位置,无需递归,但使用列表生成器

JavaScript 调整

ruby - block 变量中的括号

javascript - js .off() 不适用于 <tr> 元素

javascript - 在 chart.js 数据和标签字段中使用数组值

c++ - 使用正确的位大小在 C++ 中将十进制转换为二进制

java - 如何在递归中保持参数不变?

c++ - 递归重启循环 (C++)

javascript - 如何获取脚本标记内计数器的值

php - JSON - 使用 JS 搜索 Json 中字符串的值