[英]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.