【问题标题】:JavaScript, get all unique combinations from several arrays [duplicate]JavaScript,从几个数组中获取所有唯一组合[重复]
【发布时间】:2018-11-11 15:04:51
【问题描述】:

我正在寻找一种从多个数组生成所有可能组合的方法。当涉及到 1 时,我能够找到解决方案,但是当涉及到更多时,就会出现问题。为了更容易理解我的问题,假设我们有这两个数组:['small','big']['red', 'green'],我想要得到的结果是:

小绿球小红球大绿球大红球绿球红球小球大球绿小球红色大球

对我来说最大的困难是弄清楚你将如何做到这一点,每个数组都不会有任何重复,例如:small large ballgreen red ball

【问题讨论】:

  • 您是否只需要项目的笛卡尔积,或者您是否正在寻找所有可能的组合,无论它们是否重复(在内容上,而不是在顺序上)?

标签: javascript generator combinations


【解决方案1】:

这是我的解决方案

let sizes = ['small', 'medium sized', 'big']
let colors = ['green', 'red', 'blue']
let objects = ['ball', 'square']

const flatten = list => list.reduce(
   (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
);

function uniqeCombine(...data) {
  
  const flat = flatten(data);
  return flat.reduce( (acc, v, i) =>
    acc.concat(flat.slice(i+1).map( w => v + ' ' + w )),
  []);
}


console.log(uniqeCombine(sizes, colors, objects))

【讨论】:

  • 正如问题所说,同一个数组不应该有重复。
【解决方案2】:

使用嵌套的 for 循环。使用for of,您可以轻松地遍历数组中的每个对象:

let sizes = ['small', 'medium sized', 'big']
let colors = ['green', 'red', 'blue']
let objects = ['ball', 'square']

for (size of sizes) {
  for (color of colors) {
    for (object of objects) {
      console.log(size, color, object)
    }
  }
}

要获取green big ballbig green ball

const sizes = ['small', 'big']
const colors = ['green', 'red']

for (let size of sizes) {
  for (let color of colors) {
    console.log(size, color, 'ball')
  }
}
for (let color of colors) {
  for (let size of sizes) {
    console.log(color, size, 'ball')
  }
}

【讨论】:

  • 虽然这大部分都有效,但是在结果示例中,我展示了两个数组中的元素可以位于任何位置,例如:大绿球绿色大球
  • 我添加了一段代码,它应该可以满足您的需求。
猜你喜欢
  • 2010-12-29
相关资源
最近更新 更多