javascript - Json数据修改为新的键值对JavaScript

标签 javascript arrays json

我有一个 json 数据,我想将其重新格式化为新的键值对。我正在使用以下 JavaScript 代码来格式化我的 json 数据。

const input = {
    "file1": {
        "function1": {
            "calls": {
                "405:4": {
                "file": "file1",
                "function": "function2"
                },
                "406:4": {
                    "file": "file1",
                    "function": "function3"
                }
            }
        },
        "function2": {
            "calls": {
                "397:7": {
                    "file": "file2",
                    "function": "function1"
                }
            }
        },
        "function3": {
            "calls": null
        },
        "function4": {
            "calls": null
        }
    },
    "file2": {
        "function5": {
            "calls": {
                "43:4": {
                    "file": "file2",
                    "function": "function5"
                }
            }
        },
        "function6": {
            "calls": {
                "32:4": {
                    "file": "file1",
                    "function": "function1"
                }
            }
        }
    }
}
function transformData(data) {
    let  res = [];
    let calls = [];
    Object.entries(data).map(([fileName, fileObject]) => {
        Object.entries(fileObject).map(([functionName, functionObject]) => {
            Object.entries(functionObject).map(([functionKey, functionValue]) => {
                if(functionKey === "calls") {
                    Object.entries(functionValue).map(([callKey, callObject]) => {
                        calls = [...calls, callObject['file']+"."+callObject['function']]
                    });
                } 
            });
            res = [...res,{"name": fileName+"."+functionName, "import": calls}]  
        });
    });
    return res;
}
const sanitize = (obj) => {
    return JSON.parse(JSON.stringify(obj, (key, value) => {
        return (value === null ? undefined : value);
    }));
};
const data = sanitize(input)
const result = transformData(data);
console.log(result)

我期望的 json 数据如下:

[
  {
    "name": "file1.function1",
    "imports": [
      "file1.function2",
      "file1.function3"
    ]
  },
  {
    "name": "file1.function2",
    "imports": [
      "file2.function1"
    ]
  },
  {
    "name": "file1.function3",
    "imports": []
  },
  {
    "name": "file1.function4",
    "imports": []
  },
  {
    "name": "file2.function5",
    "imports": [
      "file2.function5"
    ]
  },
  {
    "name": "file2.function6",
    "imports": [
      "file1.function1"
    ]
  }
]

我的输出不正确。虽然它给出了适量的带有名称和导入键的主数组,但导入数组是错误的。

有人可以帮助我吗?我想我没有以正确的方式归还它。

最佳答案

您犯的错误是,您每次都将相同的 calls 数组分配给 import ,并且在后续迭代中没有清除过去的元素。替换为此代码以获得预期结果。

function transformData(data) {
    let res = [];
    Object.entries(data).map(([fileName, fileObject]) => {
        Object.entries(fileObject).map(([functionName, functionObject]) => {
            let calls = []; // Notice this line. I'm creating new array for every iteration. Another way is to clear the array before proceeding.
            Object.entries(functionObject).map(([functionKey, functionValue]) => {
                if(functionKey === "calls") {
                    Object.entries(functionValue).map(([callKey, callObject]) => {
                        calls = [...calls, callObject['file']+"."+callObject['function']]
                    });
                } 
            });
            res = [...res,{"name": fileName+"."+functionName, "import": calls}]  
        });
    });
    return res;
}

关于javascript - Json数据修改为新的键值对JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539147/

相关文章:

javascript - Node +Jade+Express+Sqlite : How can I add a MiniMap to a Leaflet Map?

java - 在二维数组中移动的最佳方式(棋盘游戏)

java - JSON 单值数组

Javascript 添加/删除事件监听器在 jQuery 自定义功能运行时不起作用

javascript - 使用简单的 JavaScript

javascript - Dojo 的依赖问题 -Uncaught TypeError : chart. addPlot 不是函数

c - 如果我的指针越过数组边界会怎样?

php - 如何使用分隔列和值的数组生成查询

Ruby JSON 节点选择、查看和值更改

python - 在 Python 中形成 Json 模型的问题