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

时间:2018-11-15 09:24:20

标签: json angular import

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

对象是嵌套的,其想法是将最后一个对象拆分为一个单独的文件,然后将其导入。我该如何实现?通过遍历所有嵌套对象直到找到我的财产? 一般问题,此过程基本上被视为导入或合并吗? 这是一种好的做法,还是我们应该重新考虑流程以避免重复?

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

我是这个行业的新手,也是第一次在stackoverflow上发帖,所以请保持谦虚。

1 个答案:

答案 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