Javascript 要映射的JSON文件
我有一个.json数据存储,希望使用Javascript 要映射的JSON文件,javascript,json,node.js,Javascript,Json,Node.js,我有一个.json数据存储,希望使用Map()特定的方法来获取值。 下面是my.json文件的一些示例: "program": [ { "name": "program1", "phases": [ { "name": "A", "cycles": [ { "name": "day
Map()
特定的方法来获取值。
下面是my.json文件的一些示例:
"program": [
{
"name": "program1",
"phases": [
{
"name": "A",
"cycles": [
{
"name": "day 1",
"exercises": [
{
"name": "workout1",
"set": 4,
"repetitions": 8
},
{
"name": "workout2",
"set": 4,
"repetitions": 8
}
]
}
]
}
]
}
]
我的目标是这样做:
console.log(program.get("program1").phases.get("A").name);
我有一个类似的函数,可以将.json文件转换为映射
const datastore = require("./datastore.json");
function toMap(array, prop) {
const map = new Map();
for(const el of array) map.set(el[prop], el);
return map;
}
var program = toMap(datastore, "name");
但这只转换一个“映射层”,所以我只能执行一个.get()
,而不能执行更深层次的操作
接下来,我要修改映射并将其保存回数据存储。您必须使用递归来修复
toMap()
函数。请参阅下面的固定版本
function toMap(array, prop) {
const map = new Map();
for(const el of array) {
map.set(el[prop], el);
for(var key in el) {
if (Array.isArray(el[key])) {
el[key] = toMap(el[key], prop);
}
}
}
return map;
}
我修复了@Vipin Kumar版本中的一些bug:
function toMap(array, key) {
const map = new Map();
for(const element of array) {
if (element[key]) {
map.set(element[key], element);
}
for(var subkey in element) {
if (Array.isArray(element[subkey])) {
if (element[subkey][0][key]) {
element[subkey] = toMap(element[subkey], key);
}
}
}
}
return map;
}
它只将具有给定键的数组转换为映射,而不是将每个数组转换为映射 为什么要将其设置为
映射
?为什么不像使用.forEach
循环那样在.json结构上迭代呢?因为我想使用.get()
选择值,有时我需要连续执行3次,所以我不想使用3.forEach
。在本例中,我认为映射比forEach的性能更好,因为我的应用程序需要大量信息。如何将转换后的映射保存回json文件?对不起,上面的代码也会在没有给定属性的情况下转换映射内的数组。