JavaScript,从几个数组中获取所有唯一组合[重复]

Posted

技术标签:

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

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

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

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

【问题讨论】:

您是否只需要项目的笛卡尔积,或者您是否正在寻找所有可能的组合,无论它们是否重复(在内容上,而不是在顺序上)? 【参考方案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')
  

【讨论】:

虽然这大部分都有效,但是在结果示例中,我展示了两个数组中的元素可以位于任何位置,例如:大绿球绿色大球 我添加了一段代码,它应该可以满足您的需求。

以上是关于JavaScript,从几个数组中获取所有唯一组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c ++从几个文件中读取几个数组

如何从javascript中第二个数组中存在的数组中删除元素? [复制]

使用 activerecord 发出请求以仅从组中获取用户,而不从其他人中获取

通过使用第二个数组中的引用从第一个数组中的每个对象中提取每个值来创建一个新数组(JavaScript)

如何组合两列以使第三列按方法从组中获取属性?

javascript可以读取txt.请问javascript如何读取本地的TXT文件,然后将内容存入1个数组中?