JSON 文件中数据的所有可能组合

2024-04-14

我的目标是创建一部分代码,该部分代码将使用 JSON 文件中的数据生成所有可能的组合,而不会重复(具有相同元素的组合,无论其顺序是什么)。我的 JSON 文件如下所示:

[
 {
   "COLLECTION": "Assault",
   "WEAPON": "SG 553",
   "SKIN": "Tornado",
   "GRADE": "Consumer Grade"
 },
 {
   "COLLECTION": "Assault",
   "WEAPON": "UMP-45",
   "SKIN": "Caramel",
   "GRADE": "Consumer Grade"
 },
 {
   "COLLECTION": "Vertigo",
   "WEAPON": "Five-SeveN",
   "SKIN": "Candy Apple ",
   "GRADE": "Industrial Grade"
 }, ...
]

组合将通过以下方式生成:

[
    "COMBINATION 1":[
     {
       "COLLECTION": "Assault",
       "WEAPON": "SG 553",
       "SKIN": "Tornado",
       "GRADE": "Consumer Grade"
     },
     {
       "COLLECTION": "Assault",
       "WEAPON": "UMP-45",
       "SKIN": "Caramel",
       "GRADE": "Consumer Grade"
     },
     {
       "COLLECTION": "Assault",
       "WEAPON": "Five-SeveN",
       "SKIN": "Candy Apple ",
       "GRADE": "Industrial Grade"
     }, ...
    ],

    "COMBINATION 2":[
     {
       "COLLECTION": "Assault",
       "WEAPON": "SG 553",
       "SKIN": "Tornado",
       "GRADE": "Consumer Grade"
     },
    {
       "COLLECTION": "Aztec",
       "WEAPON": "M4A4",
       "SKIN": "Jungle Tiger",
       "GRADE": "Industrial Grade"
     },
     {
       "COLLECTION": "Aztec",
       "WEAPON": "Tec-9",
       "SKIN": "Ossified",
       "GRADE": "Mil-Spec"
     }, ...
    ],...
]

请注意,在这种情况下,两种组合具有相同的元素,因此不应重复标注。这意味着只要组合中存在与另一个可能组合相同的元素(无论它们的顺序如何),它就被视为一个组合(每个组合将有 10 个元素,并且根据“SKIN”属性值):

[
    "COMBINATION 1":[
     {
       "COLLECTION": "Vertigo",
       "WEAPON": "SG 553",
       "SKIN": "Tornado",
       "GRADE": "Consumer Grade"
     },
     {
       "COLLECTION": "Assault",
       "WEAPON": "UMP-45",
       "SKIN": "Caramel",
       "GRADE": "Consumer Grade"
     },
     {
       "COLLECTION": "Assault",
       "WEAPON": "Five-SeveN",
       "SKIN": "Candy Apple ",
       "GRADE": "Industrial Grade"
     },...
    ],

    "COMBINATION 2":[
    {
       "COLLECTION": "Assault",
       "WEAPON": "Five-SeveN",
       "SKIN": "Candy Apple ",
       "GRADE": "Industrial Grade"
     },
      {
       "COLLECTION": "Vertigo",
       "WEAPON": "SG 553",
       "SKIN": "Tornado",
       "GRADE": "Consumer Grade"
     },
     {
       "COLLECTION": "Assault",
       "WEAPON": "UMP-45",
       "SKIN": "Caramel",
       "GRADE": "Consumer Grade"
     },...
],...

另请注意,同一项目可以在组合中出现多次(最多 10 次),并且我正在处理包含大约 1500 个元素的 JSON 文件,因此效率是关键。总而言之,最终产品应该如下所示:https://textuploader.com/1du6o https://textuploader.com/1du6o

这也是一个类似的问题,但不太复杂:JavaScript 中的排列? https://stackoverflow.com/questions/9960908/permutations-in-javascript

我尝试用冒泡排序等方法来解决这个问题,但到目前为止还没有成功。如果您有任何想法如何实现这一点,我很想听听。


尽管尚不完全清楚如何按照您建议的方式确定组合,但这可能会帮助您实现这一目标。

创建一个数据结构来存储唯一元素collection, weapon, skin, and grade:

// JSON sources.
const sources = [
  {
    "COLLECTION": "Assault",
    "WEAPON": "SG 553",
    "SKIN": "Tornado",
    "GRADE": "Consumer Grade"
  },
  {
    "COLLECTION": "Assault",
    "WEAPON": "UMP-45",
    "SKIN": "Caramel",
    "GRADE": "Consumer Grade"
  },
  {
    "COLLECTION": "Vertigo",
    "WEAPON": "Five-SeveN",
    "SKIN": "Candy Apple ",
    "GRADE": "Industrial Grade"
  },
]

// Create storage for the sources. Use sets to prevent duplicates.
const map = new Map([
  ['COLLECTION', new Set()],
  ['WEAPON', new Set()],
  ['SKIN', new Set()],
  ['GRADE', new Set()]
])

// Load each source into the map.
sources.forEach((source) => {
  Object.keys(source).forEach((key) => {
    const set = map.get(key)
    set.add(source[key])
  })
})

console.log(map)

Output:

Map {
  'COLLECTION' => Set { 'Assault', 'Vertigo' },
  'WEAPON' => Set { 'SG 553', 'UMP-45', 'Five-SeveN' },
  'SKIN' => Set { 'Tornado', 'Caramel', 'Candy Apple ' },
  'GRADE' => Set { 'Consumer Grade', 'Industrial Grade' } }

通过使用嵌套循环进行迭代,从地图集合生成所有组合:

// Store the generated combinations.
const combinations = []

// Generate all combinations.
for (const collection of map.get('COLLECTION')) {
  for (const weapon of map.get('WEAPON')) {
    for (const skin of map.get('SKIN')) {
      for (const grade of map.get('GRADE')) {
        combinations.push({
          'COLLECTION': collection,
          'WEAPON': weapon,
          'SKIN': skin,
          'GRADE': grade,
        })
      }
    }
  }
}

console.log(combinations.length) // 36
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON 文件中数据的所有可能组合 的相关文章

  • npm install 不起作用,抛出错误

    我正在尝试在 nodejs 中安装 yo 和其他一些软件包 但是我不断收到错误 我是节点新手 所以我有点迷失 我运行的是 Mac OS X 10 10 3 我正在使用的命令是 sudo npm install global yo 这样做会给
  • 没有导出的成员/节点模块

    我刚刚开始使用 5 分钟快速入门找到的 Angular 2 Typescripthere https angular io docs ts latest quickstart html 我遇到了一个看起来很常见的问题 但可能有点不同 我遇到
  • JsonCpp - 当有 json::Value 对象时,我如何知道它的键名称?

    假设我有这个 Json 文件 id 0 使用 jsoncpp 我可以有一个Json Value通过这样做来对象 Json Value node root 0u id 好的 在代码的其他地方 我明白了node对象 我想从中获取一些信息 我可以
  • 使用 ActiveAndroid 库存储 HashMap

    我有一堂课 Table name Control public class Control extends Model Column private String name Column private Map
  • (节点:20732)[DEP0018] DeprecationWarning:未处理的承诺拒绝已被弃用。未来在nodejs中

    我正在尝试在我的应用程序中生成确认链接 虽然它工作正常并且也生成链接 但是当我访问该链接时 它在 Chrome 控制台中显示 POST http localhost 3000 api auth confirmation 400 Bad Re
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • IE8 和 9 上的 socket.io 问题

    Socket io 在除 IE8 和 9 之外的所有平台上都能完美运行 这是客户端要求 你们能帮忙解决这个问题吗 我一直在阅读所有类似的问题 但到目前为止我发现的大多数解决方案都无法解决 IE8 上的这个问题 这是结构 服务器端 var i
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • 使用 ng-options 在 AngularJS 中使用 JSON 填充 select

    编辑 我的代码实际上确实有效 我只是一个有不相关问题的白痴 感谢大家的意见 所以我有一个 JSON 对象数组 格式如下 id id1 text text1 id id2 text text2 我想使用这些填充 AngularJS 选择字段
  • 使用 TFS 2015 运行 Jest 单元测试

    有人尝试将 jest 单元测试与 TFS 2015 集成吗 我尝试使用 Chutzpah 测试适配器 https visualstudiogallery msdn microsoft com f8741f04 bae4 4900 81c7
  • json 解析器和编码器应如何处理转义的 unicode?

    json 规范允许在 json 字符串 格式为 uXXXX 中转义 unicode 它特别提到受限代码点 非字符 作为有效的转义代码点 这是否意味着解析器应该从包含非字符和受限代码点的字符串生成非法的 unicode 一个例子 key uF
  • DbGeography 多边形到 JSON

    我将 DbGeography 多边形存储在数据库中 我的控制器从数据库获取多边形 我需要将它们转换为 JSON var polygons db Areas Where x gt x Type type Select x gt new Vie
  • JSON 中的哈希到底是什么?

    我正在学习 JSON 但我发现你也可以将所谓的 哈希 放入 JSON 中 我在哪里可以找到什么是哈希 或者你能向我解释一下什么是哈希吗 另外 什么是哈希图 我有 C 和 C 经验 正在学习 JS Jquery 和 JSON 哈希是一个稀疏数
  • Mandrill 验证错误

    很高兴能在 StackOverflow 上提出我的第一个问题 多年来我一直依靠它自学了很多东西 我的问题是这样的 尝试通过 Mandrill 的 API 发送邮件时出现以下错误 status error code 1 name Valida
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • 如何使用 AMQP 以“PeekLock”模式从 Azure 服务总线队列获取消息?

    我们正在尝试在 Node 应用程序中使用 Azure 服务总线 我们的要求是从队列中获取多条消息 由于Azure SDK for Node不支持批量检索 我们决定使用AMQP 虽然我们能够使用 Peek Messages 获取消息 如此处所

随机推荐

  • 如何实现不调用 count(*) 的分页器

    我正在开发一个具有 MySQL innodb 后端的 django 网站 我们的几个表中有数十万条记录 这导致管理员出现一些站点稳定性 性能问题 具体来说 django 喜欢在创建分页器时进行 count 查询 这会导致很多问题 在 Dja
  • 如何使用 Swift 中的核心蓝牙连接到 2 个或更多外设,同时从所有外设接收数据

    我已成功连接 接收和显示来自 1 个 BLE 设备的数据 但是 我的应用程序要求我连接到 2 个或更多这些设备 它们具有不同的地址 我读过可以同时连接到多个设备 但经过大量搜索后我找不到合适的指南或实现 我需要分配 2 个外围对象吗 或者有
  • 我无法获取数据列表中输入的值?

    我有一个如下所示的数据列表框 td td
  • 在 C# 中转换对象是否总是返回对初始对象的引用

    我目前正在做一个使用 Windows 窗体的 C 项目 在此过程中 我做了以下几件事 void HideButtons object sender EventArgs e Button hider Button sender foreach
  • LIMIT 的 SQL 参数不得包含变量

    我有桌子A ida PK entry year B idc PK ida FK value1 and C year PK value2 我试图从表 B 中选择第一个 n value1 与表 A 的特定 ida 相关 其中 n 是表 C 的
  • vis.js时间线如何将鼠标悬停事件添加到vis-item box-box

    我使用 vis js 创建了一个时间线图表 我有很多可见盒物品 因为我可以在时间线上显示非常有限的信息 因此 我想当用户移动到项目上时显示该项目的详细信息 我在此网址查看时间线事件的文档http visjs org docs timelin
  • 如何使用同一个应用程序制作导航抽屉和底部导航?

    我正在尝试在我的应用程序中使用导航抽屉和底部栏导航 因此我首先创建了导航活动 然后我尝试将底部栏导航添加到同一活动 我想开发这样的应用程序 Activity xml 中没有 BottomNavigationView 应用程序可以正常工作 但
  • 使用长按手势对表格视图中的单元格重新排序?

    我希望能够使用长按手势 而不是使用标准重新排序控件 对表格视图单元格重新排序 识别长按后 我希望 tableView 实质上进入 编辑模式 然后重新排序 就像我使用 Apple 提供的重新排序控件一样 有没有一种方法可以在不需要依赖第三方解
  • Python - 检查用户是否具有管理员权限

    我正在用 Python 3 x 编写一个小程序作为自学项目 我的想法是让程序允许用户输入两个文本字段 然后将用户的输入插入到两个特定注册表项的值中 有没有一种简单的方法来检查当前用户是否可以访问注册表 我宁愿它清楚地告诉用户他 她需要管理员
  • 快速选择所有带有css背景图片的元素

    我想抓取页面上具有 css 背景图像的所有元素 我可以通过过滤函数来做到这一点 但在包含许多元素的页面上速度非常慢 filter function return this css background image addClass bg f
  • 在python 2.7中使用for循环创建多个数据帧

    我有一个位置列表 HOME Office SHOPPING 和一个 pandas 数据框 DF Start Location End Location Date OFFICE HOME 3 Apr 15 OFFICE HOME 3 Apr
  • iOS 获取代理设置

    在我的项目中 我使用 libcurl 通过互联网下载数据 问题是 libcurl 无法检测 wifi 连接的代理设置 我必须手动设置 libcurl 的设置 所以我想知道如何获取 wifi 连接的代理设置 我在钥匙串中找到了一些有关信息的线
  • 邮件程序错误缺少模板

    Hello 我有问题行动邮递员 当我尝试执行操作时 rake send email 我收到一个错误 rake aborted ActionView MissingTemplate Missing template user mailer m
  • 使用 PHP 从 S3 获取视频并上传到 YouTube

    我有一些代码可以将视频文件上传到 YouTube yt new Zend Gdata YouTube httpClient create a new VideoEntry object myVideoEntry new Zend Gdata
  • 在增强for循环中使用final for循环变量的目的是什么?

    我理解下面的声明是如何工作的 for final Animal animal animalList do some function 但是这里使用final关键字的目的是什么 这样做有两个可能的原因 它可能只是避免在循环体中意外更改循环变量
  • 对象创建定义属性设置器

    我需要做到这一点 以便每次更改对象上的特定属性时 它都会调用同一对象上的特殊方法 Example MyObject prototype Object create specialMethod function someValue set f
  • 为什么“try”是一个明确的关键字?

    在我所知道的所有异常感知语言 C Java C Python Delphi Pascal PHP 中 捕获异常需要显式try块后跟catch块 我经常想知道其技术原因是什么 为什么我们不能直接追加catch普通代码块的子句 作为一个C 的例
  • 添加从 Unity for Android studio 导出的 2 个模块出现错误:“错误:程序类型已存在:bitter.jnibridge.JNIBridge”

    我在 Android Studio 中的 Kotlin 中有一个 android 项目 以及 2 个 Unity 模块 像使用 Unity 的 android studio 的项目一样导出 我想在我的项目中使用它们 但我收到错误 错误 程序
  • 最大非空列

    我需要使用基于两个 DATETIME 列的最大值的公式更新一行 我通常会这样做 GREATEST date one date two 但是 两列都允许为 NULL 即使另一个为 NULL 我也需要最大的日期 当然 当两者都为 NULL 时
  • JSON 文件中数据的所有可能组合

    我的目标是创建一部分代码 该部分代码将使用 JSON 文件中的数据生成所有可能的组合 而不会重复 具有相同元素的组合 无论其顺序是什么 我的 JSON 文件如下所示 COLLECTION Assault WEAPON SG 553 SKIN