繁体   English   中英

使用多个嵌套对象展平数组

[英]Flatten array with multiple nested objects

我有一个这样的数组,我希望它被展平以便用它生成一个 excel,但我不能得到两个以上的平面。 这是我的数据:

[
   {
      "idClient":1,
      "clientName":"Client One",
      "numItems":72,
      "projects":[
         {
            "idProject":1,
            "projectName":"Project One",
            "numItems":72,
            "languages":[
               {
                  "sourceLanguage":26,
                  "sourceLanguageName":"Spanish",
                  "numItems":72,
                  "targets":[
                     {
                        "targetLanguage":74,
                        "targetLanguageName":"English",
                        "numItems":36,
                        "numItemsSold":30,
                     },
                     {
                        "targetLanguage":20,
                        "targetLanguageName":"French",
                        "numItems":36,
                        "numItemsSold":7,
                     }
                  ]
               }
            ]
         }
      ]
   },
      {
      "idClient":1,
      "clientName":"Client One",
      "numItems":50,
      "projects":[
         {
            "idProject":1,
            "projectName":"Project Two",
            "numItems":50,
            "languages":[
               {
                  "sourceLanguage":26,
                  "sourceLanguageName":"Spanish",
                  "numItems":50,
                  "targets":[
                     {
                        "targetLanguage":74,
                        "targetLanguageName":"English",
                        "numItems":30,
                        "numItemsSold":3,
                     },
                     {
                        "targetLanguage":20,
                        "targetLanguageName":"French",
                        "numItems":20,
                        "numItemsSold":7,
                     }
                  ]
               }
            ]
         }
      ]
   }
]

我想要的是生成一个简单的字符串列表,每个目标一行,类似于以下内容:

[
  {"Client One", "Proyect One", "Spanish", "English", "36", "30" },
  {"Client One", "Proyect One", "Spanish", "French", "36", "7" },
  {"Client One", "Proyect Two", "Spanish", "English", "30", "3" },
  {"Client One", "Proyect Two", "Spanish", "English", "20", "7" },
]

查看互联网和 stackoverflow,我发现了一些有趣的功能,比如这个,但我不能超越语言属性:

const fn = arr =>
          arr.flatMap(({ projects, ...rest }) =>
            projects.map(o => ({
              ...rest,
              ...o,
            }))
          );

任何帮助将不胜感激。 提前感谢

我认为您将必须对targets上面的所有数组进行 flatMap ,如下所示:

let data = [
   {
      "idClient":1,
      "clientName":"Client One",
      "numItems":72,
      "projects":[
         {
            "idProject":1,
            "projectName":"Project One",
            "numItems":72,
            "languages":[
               {
                  "sourceLanguage":26,
                  "sourceLanguageName":"Spanish",
                  "numItems":72,
                  "targets":[
                     {
                        "targetLanguage":74,
                        "targetLanguageName":"English",
                        "numItems":36,
                        "numItemsSold":30,
                     },
                     {
                        "targetLanguage":20,
                        "targetLanguageName":"French",
                        "numItems":36,
                        "numItemsSold":7,
                     }
                  ]
               }
            ]
         }
      ]
   },
      {
      "idClient":1,
      "clientName":"Client One",
      "numItems":50,
      "projects":[
         {
            "idProject":1,
            "projectName":"Project Two",
            "numItems":50,
            "languages":[
               {
                  "sourceLanguage":26,
                  "sourceLanguageName":"Spanish",
                  "numItems":50,
                  "targets":[
                     {
                        "targetLanguage":74,
                        "targetLanguageName":"English",
                        "numItems":30,
                        "numItemsSold":3,
                     },
                     {
                        "targetLanguage":20,
                        "targetLanguageName":"French",
                        "numItems":20,
                        "numItemsSold":7,
                     }
                  ]
               }
            ]
         }
      ]
   }
]

const fn = arr =>
          arr.flatMap(({ projects, ...rest }) =>
            projects.flatMap(({languages, ...rest1}) => 
              languages.flatMap(({targets, ...rest2}) => {
                return targets.map(t => ({...t, ...rest, ...rest1, ...rest2}))
              })
            )
          );
          
data = fn(data);
console.log(data);

这将为您提供扁平的键值对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM