Javascript 生成从1到5可为给定输入选择生成的所有可能序列的列表

Javascript 生成从1到5可为给定输入选择生成的所有可能序列的列表,javascript,arrays,Javascript,Arrays,我一直在尝试一些有趣的挑战,我遇到了这个让我有点沮丧的挑战。谁能给我指出正确的方向吗 我有一份清单: var values = ['blue', 'green', 'red', 'yellow', 'purple']; 从这个列表中,我想返回给定输入的所有可能序列。我试过这样的方法: 功能组合(编号){ 常量值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”]; 设arr=values.slice(0,数字); 如果(arr.length==1){ 结果=[…arr]; console.

我一直在尝试一些有趣的挑战,我遇到了这个让我有点沮丧的挑战。谁能给我指出正确的方向吗

我有一份清单:

var values = ['blue', 'green', 'red', 'yellow', 'purple'];
从这个列表中,我想返回给定输入的所有可能序列。我试过这样的方法:

功能组合(编号){
常量值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”];
设arr=values.slice(0,数字);
如果(arr.length==1){
结果=[…arr];
console.log(结果)
}
var结果=arr.REDUCT((acc,v,i)=>acc.concat(arr.slice(i+1).map(w=>v+''+w)),[]);
控制台日志(结果);
}
组合(2)
var permArr=[],
usedChars=[];
常量值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”];
函数排列(编号、温度){
让输入=temp?temp:values.slice(0,数字);
varⅠ,ch;
对于(i=0;i
这里是一个工作示例-首先找到所有组合,并计算每个组合的排列(因此对于[“蓝色”、“绿色”]还包括[“绿色”、“蓝色”]等等)

var值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”];
功能PERM(项目){
设ret=[];
for(设i=0;i{
对于(变量i=0;i
“生成可生成的所有可能序列的列表
对于给定的输入选择,从1到5“

这就是你可以做到的:

var值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”];
函数组合(){
常量值=[“蓝色”、“绿色”、“红色”、“黄色”、“紫色”];
设arr=values.slice(0);
var result=arr.reduce((acc,v,i)=>acc.concat(arr.slice(i+1).map(w=>v+''+w)),[]);//这将减少重复数据,包括双倍数据(即蓝蓝)
var result1=arr.reduce((acc,v,i)=>acc.concat(arr.slice(i).map(w=>v+''+w)),[]);//这将只减少重复的(即蓝绿色和蓝绿色在这里是相同的)
var result2=arr.reduce((acc,v,i)=>acc.concat(arr.slice(0.map)(w=>v+''+w)),[]);//这将显示所有可能性
控制台日志(结果);
console.log(result1);
console.log(result2);
}

组合()很有趣,但它返回:[“蓝色”、“绿色”]、[“绿色”、“蓝色”]],我正在尝试:[“蓝色”、“绿色”]、[“绿色”、“蓝色”]、[“蓝色”]、[“绿色”]],因为[“蓝色”]和[“绿色”]是可能的序列,顺便说一句,我在使用示例时,数组中有两个元素(蓝色和绿色)为了简单起见sake@ibnawfi我已经修复了上述解决方案,您可以尝试now@ibnawfi对不起,我有点误解了。。现在可以试试:)第一个答案更接近我想要的,但我注意到在第一个例子中,当我做5次时,我只得到125个序列,而我应该得到325个序列。但这对从何处开始有很大帮助:)因为它删除了重复的内容-但我同意@Zuber确实直接回答了你的问题。很高兴我能帮上忙(:不用担心,老兄,我非常感谢你帮了我的忙!哦,哇,谢谢你解释这一点。我想你的答案与我得到的提示最接近。提示是“如果用户输入5,你应该得到325个序列”,你的解决方案就是这样做的
var permArr = [],
      usedChars = [];
      const values = ['blue', 'green', 'red', 'yellow', 'purple'];

    function permute(number, temp) {

      let input = temp ? temp : values.slice(0, number);

      var i, ch;
      for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        // if (input.length == 0) {
          permArr.push(usedChars.slice());
        // }
        temp = input;
        permute(number, input);
        input.splice(i, 0, ch);
        usedChars.pop();
      }
      return permArr  
    };

    var perm = permute(5);
    console.log(perm.length)
    console.log(perm);