在我们的角度应用程序中,当前情况是,现有的JSON文件会随即将执行的任务而变得越来越大,其想法是将其拆分为多个JSON文件,并在需要时将其导入正确的位置。
对象是嵌套的,其想法是将最后一个对象拆分为一个单独的文件,然后将其导入。我该如何实现?通过遍历所有嵌套对象直到找到我的财产? 一般问题,此过程基本上被视为导入或合并吗? 这是一种好的做法,还是我们应该重新考虑流程以避免重复?
{
"name":"a",
"value1":"b",
"properties": {
"name":"aa",
"value1":"bb",
"properties": {
"name":"aaa",
"value1":"bbb",
"properties": {
//import here
}
我是这个行业的新手,也是第一次在stackoverflow上发帖,所以请保持谦虚。
答案 0 :(得分:1)
这称为展平,这是一个相当普遍的问题。
要解决此问题,请使用递归函数(一个调用自身的函数)。
我将从上至下为您提供扁平化的产品,您可以自己尝试从底部开始!
N.B。 :(这是一种相当高级的语法,如果您不理解,我可以向您解释或简化)
const data = {
id: 1,
child: {
id: 2,
child: {
id: 3,
child: {
id: 4,
child: {
id: 5,
}
}
}
}
};
const flattened = [];
function flatten(item, target) {
const { child, ...toPush } = item;
target.push(toPush);
child && flatten(child, target);
}
flatten(data, flattened);
console.log(flattened);
然后可以保存数组的每个项目。我建议您为此使用一个库,例如FileSaver,以创建文件并下载它们。
简体:
const data = {
id: 1,
child: {
id: 2,
child: {
id: 3,
child: {
id: 4,
child: {
id: 5,
}
}
}
}
};
const flattened = [];
function flatten(item, target) {
const toPush = { id: item.id };
const child = item.child;
target.push(toPush);
if (child) flatten(child, target);
}
flatten(data, flattened);
console.log(flattened);
说明
.push
与该项目减去其子项(在我的情况下,仅ID)一起使用这样,您将获得一个扁平化的数组,如控制台日志中所示。
对于“高级语法”,我使用destructuring assignement和逻辑运算符作为explained here