JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
JavaScript algorithm to give every possible combination of items and store them in an array
我正在寻找一种很好的方法来制作一个解决这个问题的程序:
首先给出一个具有字符串值的数组:
var array1 = ["a", "b", "c", "d"]
接下来,我想将字符串值的每一个可能的组合(顺序)存储在新的数组中
例如:
combo1 = ["a", "b", "d", "c"]
combo2 = ["a", "c", "b", "d"]
combo3 = [...etc.]
该程序还需要能够对大数组执行此操作。例如,第一个数组(array1)中最多有20个项目。因此,它需要用一个函数自动完成创建"组合数组"的所有工作。
解决这个问题的好方法是什么?最好使用JavaScript,但我愿意在外部语言中听到它。
正如你可能已经猜到的,在编程方面,我是一个相当初级的人。我已经掌握了基本知识,现在正试图为一个项目编写一个程序。请提前帮助并感谢您!
在haskell中,您可以使用排列
permutations "abc" == ["abc","bac","cba","bca","cab","acb"]
在JavaScript中,您需要自己编写排列函数:
function permutations(list) {
if (list.length <= 1)
return list.slice();
var result = []
, i = 0
, resultRest
, current
, rest
, j;
for(; i<list.length; i++) {
rest = list.slice(); // make a copy of list
current = rest.splice(i, 1);
permutationsRest = permutations(rest);
for(j=0; j<permutationsRest.length; j++) {
result.push(current.concat(permutationsRest[j]));
}
}
return result;
}
permutations(['a', 'b', 'c'])
> [ [ 'a', 'b', 'c' ],
[ 'a', 'c', 'b' ],
[ 'b', 'a', 'c' ],
[ 'b', 'c', 'a' ],
[ 'c', 'a', 'b' ],
[ 'c', 'b', 'a' ] ]
然而,如果你的投入很大,这将需要一段时间。也许你应该考虑另一种方法。
相关文章:
- 组合框是否需要数据存储
- JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
- 将数据加载到存储后,Extjs组合框为空
- Rally App SDK 2.0rc1-为什么我的组合框只在第一次点击时忽略数据存储过滤器
- ExtJS组合框和过滤存储
- 组合框和绑定存储的存储筛选
- 绑定存储中断组合框
- 构建菜单或组合框,数据存储在“动态”数组中
- 无法在 ExtJS4 中加载组合的存储
- EXT JS :在组合框中,如何为不在存储中的记录设置显示字段
- ExtJS4 组合框加载/存储问题
- extjs4.2组合框只显示存储的唯一条目
- 组合框将不显示加载的存储数据
- EXT-JS组合框'当动态加载数据时,s存储在扩展后重置
- Extjs组合框在存储区未加载任何结果时保持重置文本值
- 如何在ExtJS 4中将存储加载到组合框时发送额外的参数
- 设置extjs 6组合框's在运行时存储数据会导致显示错误
- 如何创建一个通用的ExtJS组合框存储
- ExtJS 6.防止延迟呈现具有本地存储的组合框
- 如何设置一个dojo组合框存储