You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery生成单词数组的1-4词所有组合

没问题,我帮你搞定这个需求!从你的示例来看,你需要的是生成单词数组中所有1到4词的有序排列组合(也就是不同顺序算不同的项,比如"I have"和"have I"都要),下面是具体的JavaScript实现方案:

解决方案:生成1到N词的所有有序排列组合

1. 核心思路

  • 用回溯法生成指定长度的所有排列(确保每个元素在单个排列中只出现一次)
  • 遍历1到数组长度的所有目标长度,依次生成对应排列
  • 将每个排列转为空格分隔的字符串后收集到结果数组中

2. 完整代码实现

// 生成指定长度k的所有排列(元素不重复选取)
function getPermutations(arr, k) {
  const result = [];
  const used = new Array(arr.length).fill(false);

  // 回溯递归函数
  function backtrack(currentPerm) {
    // 当当前排列长度达到k时,存入结果
    if (currentPerm.length === k) {
      result.push([...currentPerm]);
      return;
    }
    // 遍历数组,尝试每个未使用的元素
    for (let i = 0; i < arr.length; i++) {
      if (!used[i]) {
        used[i] = true;
        currentPerm.push(arr[i]);
        backtrack(currentPerm);
        // 回溯:移除当前元素,标记为未使用
        currentPerm.pop();
        used[i] = false;
      }
    }
  }

  backtrack([]);
  return result;
}

// 你的原始单词数组
var word_array = ['I','have','a','television'];
var combination = [];

// 遍历1到数组长度的所有目标长度
for (let len = 1; len <= word_array.length; len++) {
  // 获取当前长度的所有排列
  const permutations = getPermutations(word_array, len);
  // 将每个排列转为空格分隔的字符串,加入结果数组
  permutations.forEach(perm => {
    combination.push(perm.join(' '));
  });
}

// 打印结果(可以根据需求调整输出方式)
console.log(combination);

3. 代码说明

  • getPermutations函数:通过回溯法生成所有长度为k的排列,used数组用于标记元素是否已被选中,避免在同一个排列中重复使用。
  • 主循环:从1到数组的长度(这里是4),依次生成对应长度的排列,再转为字符串存入结果数组。
  • 去重处理:如果你的单词数组中存在重复元素,生成的结果可能会有重复字符串,这时候可以用combination = [...new Set(combination)]来去重。

4. 结果示例

运行代码后,结果数组会包含:

  • 所有单个单词(如'I'、'have')
  • 所有两个单词的有序组合(如'I have'、'have I'、'a television')
  • 所有三个单词的有序组合(如'I have a'、'have a television')
  • 所有四个单词的全排列(如'I have a television'、'television a have I')

内容的提问来源于stack exchange,提问作者k r harsha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:30:28