Javascript - 每个订单的单个数组中所有可能的组合

2023-12-09

Javascript - 生成单个数组中元素的所有组合(成对)

所以我已经看到了这个问题,也看到了它的一些答案,但我想知道是否有可能获得所有组合,即使它在每个可能的顺序中都是重复的。

ex.

var array = ["apple", "banana", "lemon", "mango"];

output

var result = [
   "apple"
   "apple banana"
   "apple banana lemon"
   "apple banana lemon mango"
   "apple lemon"
   "apple lemon banana mango"
   "apple lemon mango banana"
   "apple mango"
   "apple mango lemon banana"
   "apple mango banana lemon"
   "banana"
   "banana apple"
   "banana apple lemon"
   "banana apple mango"
   "banana lemon"
   "banana lemon apple"
   "banana lemon apple mango"
   "banana mango"
   ...
];

最后,我本质上想要所有可能的组合,无论是每个可能的顺序中的 1 个项目、成对的项目还是多个项目。

我见过的最接近的答案是这组代码。

function getCombinations(valuesArray: String[])
{

var combi = [];
var temp = [];
var slent = Math.pow(2, valuesArray.length);

for (var i = 0; i < slent; i++)
{
    temp = [];
    for (var j = 0; j < valuesArray.length; j++)
    {
        if ((i & Math.pow(2, j)))
        {
            temp.push(valuesArray[j]);
        }
    }
    if (temp.length > 0)
    {
        combi.push(temp);
    }
}

combi.sort((a, b) => a.length - b.length);
console.log(combi.join("\n"));
return combi;
}
let results = getCombinations(['apple', 'banana', 'lemon', ',mango']);

enter image description here


首先创建函数来查找数组的所有组合:

function combinations(array) {
  return new Array(1 << array.length).fill().map(
    (e1, i) => array.filter((e2, j) => i & 1 << j));
}

然后你必须创建函数来生成给定数组的所有排列(例如this使用堆的方法:

function permute(permutation) {
  var length = permutation.length,
      result = [permutation.slice()],
      c = new Array(length).fill(0),
      i = 1, k, p;

  while (i < length) {
    if (c[i] < i) {
      k = i % 2 && c[i];
      p = permutation[i];
      permutation[i] = permutation[k];
      permutation[k] = p;
      ++c[i];
      i = 1;
      result.push(permutation.slice());
    } else {
      c[i] = 0;
      ++i;
    }
  }
  return result;
}

之后,您可以将其组合到最终函数中:

function calculateAllCombinations(myArray) {
    var allValues = combinations(myArray)

    var response = allValues

    for(let v of allValues) {
        response = response.concat(permute(v))
    }

    //Return removed duplicates
    return Array.from(new Set(response.map(JSON.stringify)), JSON.parse)

}

最后你可以这样称呼它:

var myArray = ["apple", "banana", "lemon", "mango"]

var allValues = calculateAllCombinations(myArray)
function combinations(array) {
  return new Array(1 << array.length).fill().map(
    (e1, i) => array.filter((e2, j) => i & 1 << j));
}

function permute(permutation) {
  var length = permutation.length,
      result = [permutation.slice()],
      c = new Array(length).fill(0),
      i = 1, k, p;

  while (i < length) {
    if (c[i] < i) {
      k = i % 2 && c[i];
      p = permutation[i];
      permutation[i] = permutation[k];
      permutation[k] = p;
      ++c[i];
      i = 1;
      result.push(permutation.slice());
    } else {
      c[i] = 0;
      ++i;
    }
  }
  return result;
}
function calculateAllCombinations(myArray) {
    var allValues = combinations(myArray)

    var response = allValues

    for(let v of allValues) {
        response = response.concat(permute(v))
    }

    //Return removed duplicates
    return Array.from(new Set(response.map(JSON.stringify)), JSON.parse)

}
var myArray = ["apple", "banana", "lemon", "mango"]

var allValues = calculateAllCombinations(myArray)

console.log(allValues);
.as-console-wrapper{top:0;max-height:unset!important;overflow:auto!important;}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript - 每个订单的单个数组中所有可能的组合 的相关文章

随机推荐

  • 翻译 JQuery Mobile 小部件

    Using i18next 如何翻译 JQuery Mobile 小部件 具体来说 我想知道如何在不诉诸使用的情况下做到这一点data i18n target修改生成的内部元素 因为这很脆弱 因为未来的小部件版本可能会更改生成的代码 是否有
  • 有没有办法将多个命令输出复制到剪贴板?

    我有 4 个命令链接在一起 我想立即将所有四个命令的输出复制到剪贴板 基本上将每个命令的输出附加到剪贴板 这可能吗 我正在运行的命令是这样的 ipconfig findstr IPv4 systeminfo findstr B C OS N
  • 使用 Shell 函数运行 exe 时出现文件未找到错误

    我正在从用户表单运行一个子程序 该子程序应该运行在工作文件夹中找到的 exe 文件 如下所示 Sub RunProcessor If MsgBox Run simulation vbYesNo vbNo Then Exit Sub Else
  • C# Graphics.CopyFromScreen“参数无效”

    我用 C 制作了一个应用程序 它将连续执行屏幕捕获并使用计时器将其显示在 PictureBox 中 运行几秒后 出现ArgumentException 下面是代码和具有 ArgumentException 的行 private void t
  • 使用请求库的重试历史记录

    我正在我的 Orchestrate 脚本中构建一个新的重试功能 我想知道尝试连接到特定 URL 时我的请求方法发生了多少次 以及 如果可能 发生了什么错误 现在 我需要这个用于记录目的 因为我正在开发一个消息系统 一旦我在一个消息系统中工作
  • 如何访问从故事板加载的视图控制器的属性?

    我有一个创建的视图控制器实例instantiateViewControllerWithIdentifier像这样 TBSCTestController testController self storyboard instantiateVi
  • 使用 opencv 进行音频输出和视频处理

    我正在使用 opencv 处理视频 但同时我需要播放音频并简单地控制它 例如大声或当前帧号 我想我应该用 ffmpeg 创建一个并行进程 但我不知道该怎么做 你能解释一下该怎么做吗 或者你知道另一种解决方案吗 I think ffmpeg应
  • 在共享存储 Xamarin 表单中保存文件

    我需要在android的共享存储中保存一个文件 我发现了这个链接 gt https developer android com training data storage shared documents files 我正在使用依赖项服务
  • 如何在 node.js selenium-webdriver 中模拟右键单击?

    我在用用于 Node js 的 selenium webdriver 如何使用该驱动程序模拟右键单击 我在官方文档中找不到这个 谢谢 wmash 你帮我找到解决方案 答案 已找到here driver actions click eleme
  • 如何在不使用构造函数 DI 的情况下创建 Http 实例? (RC.5+) [重复]

    这个问题在这里已经有答案了 我需要在不使用 Angular2 的 DI 的情况下获取 Http 的实例 constructor private http Http 以下代码摘自另一个 stackoverflow 问题 并且它适用于 Angu
  • 如何允许用户在 Android 应用程序中添加和删除选项卡

    我正在开发一个使用选项卡的应用程序 每个选项卡都链接到一个网页 用户可以使用 webview 查看该网页并与之交互 我遇到的问题是实现一个添加和删除命令 用户可以根据需要使用该命令删除选项卡 或者添加一个带有自己选择的 url 的选项卡 其
  • 为什么 std::make_unique 调用复制构造函数

    我想知道为什么 make unique 调用复制构造函数但不调用默认构造函数 Node std cout lt lt default Node std cout lt lt Delete Node const Node other std
  • jQuery Mobile / Handlebars - 打开面板隐藏 data-role=content div

    我正在尝试将 Handlebars 与 jQuery mobile 一起使用 我正在使用 jQuery 1 9 1 jQueryMobile 1 4 Handlebars 1 1 2 div div div h1 Title h1 div
  • Rails db:migrate 与 rake db:migrate

    我注意到在 Rails 5 中生成数据迁移时 有些人使用rails db migrate over rake db migrate 有人可以解释一下两者之间的区别吗rails和rake数据库迁移命令 这是否意味着rake命令在 Rails
  • 替换 int 中的字节

    一个int由4个字节组成 我如何用新字节替换这 4 个字节之一 换句话说 我正在寻找一种方法 int ReplaceByte int index int value byte replaceByte implementation 例如 如果
  • 使用 Docker Compose 和 WordPress 映像设置 Xdebug

    我正在尝试使用 docker compose 设置 Xdebug 我正在使用 PhpStorm IDE 并且我正在使用的 Docker 映像安装 PHP 7 2 我正在尝试在这个 WordPress 图像的上下文中执行此操作 这是我当前的
  • 使用相同的 Visual Studio 解决方案部署多个 WP7 应用程序?

    如何使用同一 Visual Studio 解决方案部署多个 WP7 应用程序 我需要改变什么才能实现这一目标 更改 Xap 文件名 程序集 GUID 和标题无法实现此目的 事实上 VS 用新标题覆盖旧的 但不部署单独的应用程序 背景 我们有
  • Javascript 将选定的复选框限制为 2 个

    我想禁用选择超过 2 个选择复选框 但我无法使用我的 javascript 代码做到这一点 我怎样才能做到这一点 btn addEventListener click function var ourRequest new XMLHttpR
  • Android O 中的 Doze 模式下前台服务未接收位置更新

    我有一个前台服务需要获取单个位置更新 它由特定的广播启动 启动后它只需在我们的后端发出一个请求 当它收到另一个广播时 它会请求位置更新 一次 执行另一个后端请求 然后自行停止 编辑 澄清一下 服务本身执行位置更新和后端请求 在这方面它独立于
  • Javascript - 每个订单的单个数组中所有可能的组合

    Javascript 生成单个数组中元素的所有组合 成对 所以我已经看到了这个问题 也看到了它的一些答案 但我想知道是否有可能获得所有组合 即使它在每个可能的顺序中都是重复的 ex var array apple banana lemon