首页 > 解决方案 > JSON对象中的排列

问题描述

所以我想输入一段代码(在 Node.js 中),它会给我一个 JSON 对象中对象的所有排列。每个排列应该是唯一的(两个排列是相同的,只要它们具有完全相同的对象,无论它们的位置如何)。我的 JSON 对象如下所示:

[
 {
   "ID": "5465464",
   "e-mail": "something@gmail.com",
   "name": "John"
 },
 {
   "ID": "5433364",
   "e-mail": "something2@gmail.com",
   "name": "Nick"
 },
 {
   "ID": "5465244",
   "e-mail": "something3@gmail.com",
   "name": "George"
 },
 {
   "ID": "5464874",
   "e-mail": "something4@gmail.com",
   "name": "Rick"
 },
 {
   "ID": "5442164",
   "e-mail": "something5@gmail.com",
   "name": "Wayne"
 }
]

所以输出基本上应该给我所有对象的所有可能组合(每个组合 3 个对象),它应该看起来像这样:

[
    "PERMUTATION1":[
        {
           "ID": "5465464",
           "e-mail": "something@gmail.com",
           "name": "John"
         },
         {
           "ID": "5433364",
           "e-mail": "something2@gmail.com",
           "name": "Nick"
         },
         {
           "ID": "5465244",
           "e-mail": "something3@gmail.com",
           "name": "George"
         }
    ],
    "PERMUTATION2":[
        {
           "ID": "5465464",
           "e-mail": "something@gmail.com",
           "name": "John"
         },
         {
           "ID": "5464874",
           "e-mail": "something4@gmail.com",
           "name": "Rick"
         },
         {
           "ID": "5465244",
           "e-mail": "something3@gmail.com",
           "name": "George"
         }
    ],
    "PERMUTATION3":[
        {
           "ID": "5465464",
           "e-mail": "something@gmail.com",
           "name": "John"
         },
        {
           "ID": "5465464",
           "e-mail": "something@gmail.com",
           "name": "John"
        },
        {
           "ID": "5465464",
           "e-mail": "something@gmail.com",
           "name": "John"
        }
    ],...
]

请注意,一个对象可以在一个排列中出现多次(最多 3 次),但两个不同的排列中不能有完全相同的元素(元素的位置无关紧要)。我试图用冒泡排序和其他不同的排序算法来解决这个问题,但到目前为止还没有成功。如果您对如何实现这一点有任何想法,请告诉我。

标签: node.jsjsoncombinationspermutationcombinatorics

解决方案


所以我通过使用这个 npm 包解决了这个问题:https : //www.npmjs.com/package/js-combinatorics (js-combinatorics),我使用了 bigCombination。我知道这不是最好的解决方案,但它工作得很好。


推荐阅读