javascript - 我正在尝试将数组数组中的数字与具有类别中列出的文件名列表的对象相关联

标签 javascript

注意: 我的代码工作正常。这是一个关于程序设计的概念性问题,而不是直接关于损坏的代码。

我有一个数组数组。 设置 = [[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/

相关文章:

javascript - v-html 中的 Vue 组件/元素

javascript - 函数不返回记录集

javascript - 根据数据属性更改 d3.js 符号大小

javascript - Safari IOS 10 上的错误 : The quota has been exceeded.

javascript - 我可以将函数的参数转换为其自己的变量名称吗?

php - 在 JavaScript 中创建 JSON

javascript - 为什么这个 jQuery 选择器找不到我的表单?

javascript - 将 bluebird Promise 添加到 NodeJS 模块,然后函数未定义

javascript - 如何使 google recaptcha 响应宽度为 100%

javascript - 追加后元素的大小不更新