【问题标题】:Alter array of object using map in javascript在 javascript 中使用 map 更改对象数组
【发布时间】:2021-09-15 08:20:26
【问题描述】:

我有一个对象数组: 注意:我想使用map javascript方法在内部categories中添加新对象,其中将包含新对象subcat3,其中还包含“组”内的所有group对象。

[
   {
      "id":"presentation",
      "categories":[
         {
            "id":"cat1",
            "categories":[
               {
                  "id":"subcat1",
                  "name":"subcat1",
                  "group":[
                     {
                        "id":"group1",
                        "name":"group1"
                     },
                     {
                        "id":"group2",
                        "name":"group2"
                     }
                  ]
               },
               {
                  "id":"subcat2",
                  "name":"subcat2",
                  "group":[
                     {
                        "id":"group3",
                        "name":"group3"
                     }
                  ]
               }
            ]
         }
      ]
   }
]

我需要的结果::

[
   {
      "id":"presentation",
      "categories":[
         {
            "id":"cat1",
            "categories":[
               {
                  "id":"subcat1",
                  "name":"subcat1",
                  "group":[
                     {
                        "id":"group1",
                        "name":"group1"
                     },
                     {
                        "id":"group2",
                        "name":"group2"
                     }
                  ]
               },
               {
                  "id":"subcat2",
                  "name":"subcat2",
                  "group":[
                     {
                        "id":"group3",
                        "name":"group3"
                     }
                  ]
               },
               {
                  "id":"subcat3",
                  "name":"subcat3",
                  "group":[
                     {
                        "id":"group1",
                        "name":"group1"
                     },
                     {
                        "id":"group2",
                        "name":"group2"
                     },
                     {
                        "id":"group3",
                        "name":"group3"
                     }
                  ]
               }
            ]
         }
      ]
   }
]

【问题讨论】:

标签: javascript arrays loops


【解决方案1】:

如果你想确定使用地图,那么你可以按照下面的方法。

逻辑

  • 通过输入数组中的节点映射
  • 映射每个节点中的类别
  • 映射每个类别中的类别
  • 映射该类别中的每个组。

从生成的数组中,将该数组与级别 3 平展并推送到您想要的节点。

const input = [{"id":"presentation","categories":[{"id":"cat1","categories":[{"id":"subcat1","name":"subcat1","group":[{"id":"group1","name":"group1"},{"id":"group2","name":"group2"}]},{"id":"subcat2","name":"subcat2","group":[{"id":"group3","name":"group3"}]}]}]}];
const newCat = input.map((ipCategory) => ipCategory.categories.map((category) => category.categories.map((innerCategory) => innerCategory.group.map((group) => group))));
const groups = newCat.flat(3);
input[0].categories[0].categories.push({
  id:"subcat3",
  name:"subcat3",
  group: groups
});
console.log(input);

【讨论】:

    【解决方案2】:
    const input = [{"id":"presentation","categories":[{"id":"cat1","categories":[{"id":"subcat1","name":"subcat1","group":[{"id":"group1","name":"group1"},{"id":"group2","name":"group2"}]},{"id":"subcat2","name":"subcat2","group":[{"id":"group3","name":"group3"}]}]}]}];
    
    const newInput = input.reduce((a,c) => {
        const modified = c.categories.map((category, id) => {
        return({
            ...category,
            'categories': [
                ...category.categories,
                { id: 'subcat3', name: 'subcat3', groupings: category.categories.flatMap(({ group }) => group) }
            ]
           });
        });
        return [{
            ...c,
            categories: c.categories.map((i, ind) => ({ ...modified[ind]}))
        }];
    }, []);
    

    【讨论】:

    • 嗨,你能解释一下你的解决方案吗,为什么它会解决他的问题?它到底是做什么的?
    • @eupho 请解释您的解决方案,而不仅仅是提供代码块
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    一个简单的方法::

    const input = [{"id":"presentation","categories":[{"id":"cat1","categories":[{"id":"subcat1","name":"subcat1","group":[{"id":"group1","name":"group1"},{"id":"group2","name":"group2"}]},{"id":"subcat2","name":"subcat2","group":[{"id":"group3","name":"group3"}]}]}]}];
    
    const newPresentation = input.map(({ categories = [], ...rest }) => ({
            ...rest,
            categories: categories.map(({ id, categories = [], ...rest }) => ({
              ...rest,
              id,
              categories: [
                ...categories,
                { id: 'subcat3', name: 'subcat3', group: categories.flatMap(({ groups }) => groups) },
              ],
            })),
          }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多