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 ball或green 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 ball
和big 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,从几个数组中获取所有唯一组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从javascript中第二个数组中存在的数组中删除元素? [复制]
使用 activerecord 发出请求以仅从组中获取用户,而不从其他人中获取