在特定位置导入JSON文件中的数组/对象以避免冗余



在我们的angular应用程序中,我们目前的情况是,现有的JSON文件随着即将到来的任务而变得越来越大,我们的想法是将其拆分为多个JSON文件,并在需要时将其导入正确的位置。

对象是嵌套的,其想法是将最后一个对象拆分为一个单独的文件,然后导入。我该如何做到这一点?通过循环遍历所有嵌套对象直到找到我的属性?一般性问题,这个过程基本上被认为是导入还是合并?这是一种好的做法吗?还是我们应该重新思考流程以避免冗余?

{
"name":"a",
"value1":"b",
"properties": {
"name":"aa",
"value1":"bb",
"properties": {
"name":"aaa",
"value1":"bbb",
"properties": {
//import here
}

我是新来的,也是第一次在stackoverflow上发帖,所以请温柔一点。

这被称为扁平化,是一个相当常见的问题。

要解决此问题,请使用递归函数(一个调用自身的函数(。

我会给你从上到下的奉承者,请随意尝试自己从下开始!

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);

解释

  • 首先创建一个函数:该函数将接受一个项和一个目标作为params
  • 在函数中,必须将项添加到数组中,并对所有子树执行此操作
  • 要做到这一点,您需要创建一个空数组,并将.push与该项减去其子项(在我的情况下,只有ID(一起使用
  • 推送后,您必须重新运行此函数,但该项将成为上一项的子项
  • 您可以使用一个条件来保护函数,该条件表示如果未定义子函数,它将不会执行任何操作

这样,您可以得到一个扁平的数组,如控制台日志中所示。

对于";高级语法";,我使用了析构函数赋值和逻辑运算符,如所述

最新更新