要映射的JSON文件
我有一个.json数据存储区,并希望使用Map()
特定方法来获取值。这是我的.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()
。
接下来,我想修改Map并将其保存回数据存储区。
回答如下:你必须使用递归来修复你的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;
}
函数。请参阅下面的固定版本
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;
}