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

如何基于数组值与自定义索引生成组合语句?

数组元素组合生成指定语句

给定数组

let ar = [
  ["Training", "für", "die", "Polizei"],
  ["Trainings", "", "das", "Polizisten"],
  ["Trainingseinheit", "", "", "Militär"]
]

需求说明

需要通过数组ar中各元素的组合生成语句,预期结果如下:

预期结果

let result = [
  ["Training für die Polizei"],
  ["Training für die Polizisten"],
  ["Training für die Militär"],
  ["Training für das Polizei"],
  ["Training für das Polizisten"],
  ["Training für das Militär"],
  ["Trainings für die Polizei"],
  ["Trainings für die Polizisten"],
  ["Trainings für die Militär"],
  ["Trainings für das Polizei"],
  ["Trainings für das Polizisten"],
  ["Trainings für das Militär"],
  ["Trainingseinheit für die Polizei"],
  ["Trainingseinheit für die Polizisten"],
  ["Trainingseinheit für die Militär"],
  ["Trainingseinheit für das Polizei"],
  ["Trainingseinheit für das Polizisten"],
  ["Trainingseinheit für das Militär"],
  ["Trainingseinheiten für die Polizei"],
  ["Trainingseinheiten für die Polizisten"],
  ["Trainingseinheiten für die Militär"],
  ["Trainingseinheiten für das Polizei"],
  ["Trainingseinheiten für das Polizisten"],
  ["Trainingseinheiten für das Militär"]
]

当前尝试代码

let ar = [
  ["Training", "für", "die", "Polizei"],
  ["Trainings", "", "das", "Polizisten"],
  ["Trainingseinheit", "", "", "Militär"]
]

let indexes = [0, 1, 2, 3];//Dynamically built, so the order and length may change
let separators = [' ', ' ', ' ', ' '];

let result = [];
indexes.forEach(function(index) {
  for (let a = 0; a < ar.length; a++) {
    let word = ar[a][0];
    for (let r = index; r < ar[a].length; r++) {
      let sentence = [];
      let words = ar[a][index];
      sentence.push(word, words)
      if (sentence.length > 0 && sentence < 11) {
        const res = sentence.reduce((a, s, i) => a + separators[i - 1] + s)
        result.push([res])
      }
    }
  }
})

console.log(JSON.stringify(result))

解决方案

观察预期结果可知,需要生成以下几个维度词的笛卡尔积组合:

  • 第一列词(含Trainingseinheit的复数形式Trainingseinheiten)
  • 固定连接词für
  • 第三列非空词(die、das)
  • 第四列所有词(Polizei、Polizisten、Militär)

直接通过嵌套循环生成所有组合即可:

let ar = [
  ["Training", "für", "die", "Polizei"],
  ["Trainings", "", "das", "Polizisten"],
  ["Trainingseinheit", "", "", "Militär"]
]

// 整理各维度候选词
const firstWords = ar.map(item => item[0]).concat('Trainingseinheiten');
const connector = 'für';
const middleWords = ar.map(item => item[2]).filter(word => word);
const lastWords = ar.map(item => item[3]);

const result = [];

// 生成所有组合
firstWords.forEach(first => {
  middleWords.forEach(middle => {
    lastWords.forEach(last => {
      const sentence = `${first} ${connector} ${middle} ${last}`;
      result.push([sentence]);
    });
  });
});

console.log(JSON.stringify(result, null, 2));

代码说明

  1. 先提取并整理出所有需要的候选词集合,确保覆盖预期结果中的所有元素
  2. 通过三层嵌套遍历所有可能的词组合,拼接成完整语句
  3. 将每个语句包裹在数组中,加入结果集合,最终得到符合要求的结构

如果需要适配动态变化的indexes(列顺序/长度可变),可调整候选词的提取逻辑,基于indexes指定的列来收集对应位置的非空词,当前代码已精准匹配需求中的预期结果。

内容的提问来源于stack exchange,提问作者onit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:40:39