注意: 我的代码工作正常。这是一个关于程序设计的概念性问题,而不是直接关于损坏的代码。
我有一个数组数组。 设置 = [[28, 12, 14], [34, 83, 89], [78, 34, 29]]
另外,我有一个 JSON 文件,其中包含文件名列表,定义为 3 个类别。
{
"main": [
{"id": "main001", "src": "main001.png"},
{"id": "main002", "src": "main002.png"},
...
{"id": "main098", "src": "main098.png"}
],
"corner": [
{"id": "corner001", "src": "corner001.png"},
{"id": "corner002", "src": "corner002.png"},
...
{"id": "corner047", "src": "corner047.png"}
],
"edge": [
{"id": "edge001", "src": "edge001.png"},
{"id": "edge002", "src": "edge002.png"},
...
{"id": "edge216", "src": "edge216.png"}
]
}
JSON 是目录中某处存在的文件的目录,因此应用程序无需手动读取该目录即可获取文件列表。
这 3 个类别和数字数组直接相关。 (JSON 类别 1 = set[0]
等)。子数组中的数字在 JSON 中列出的每个类别的文件数范围内。
我想将 34(来自上面的 set[1][0]
)关联到 JSON 文件中的直接条目(类别 2,文件 34)。 set[1][34]
应该映射到 files['corner'][34]
这样我就可以在那里获取数据。
我一直在使用嵌套 for
循环、嵌套 forEach
函数等来执行此操作。基本上,我一直在循环 set[category]
然后通过 category[entry]
进行子循环以从 JSON 文件中获取该特定行。
但我忍不住想...是否有更好的方法使用某种 map
方法/函数来做到这一点?
最佳答案
是的,您可以使用Array.prototype.map
来做到这一点。首先,您需要获取解析 JSON
时得到的对象的键。
let keys = Object.keys(o);
假设o
是具有类别的对象,那么您可以像下面这样映射
它。
set = set.map((a, i) => a.map(e => o[keys[i]][e - 1]));
然后就可以通过set[1][0]
轻松访问。
工作演示
let o = {
"main": [{
"id": "main001",
"src": "main001.png"
},
{
"id": "main002",
"src": "main002.png"
},
{
"id": "main098",
"src": "main098.png"
}
],
"corner": [{
"id": "corner001",
"src": "corner001.png"
},
{
"id": "corner002",
"src": "corner002.png"
},
{
"id": "corner047",
"src": "corner047.png"
}
],
"edge": [{
"id": "edge001",
"src": "edge001.png"
},
{
"id": "edge002",
"src": "edge002.png"
},
{
"id": "edge216",
"src": "edge216.png"
}
]
};
let set = [
[2, 1, 3],
[1, 2, 3],
[1, 2, 3]
];
let keys = Object.keys(o);
set = set.map((a, i) => a.map(e => o[keys[i]][e - 1]));
console.log(set);
console.log(set[1][0]);
关于javascript - 我正在尝试将数组数组中的数字与具有类别中列出的文件名列表的对象相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850231/