将permute方法从Java转换为JavaScript

将permute方法从Java转换为JavaScript,javascript,java,string,couchdb,cloudant,Javascript,Java,String,Couchdb,Cloudant,我实现了一个用于排列组合的Java代码,该字符串带有输入str=“word1 word2 word3”,然后输出为: arr[0]=“字1字2” arr[1]=“word1 word3” arr[2]=“word1 word2 word3” arr[3]=“word2 word1” arr[4]=“word2 word1 word3” arr[5]=“word2 word3 word1” arr[6]=“word3 word1” arr[7]=“word3 word1 word2” arr[8]

我实现了一个用于排列组合的Java代码,该字符串带有输入
str=“word1 word2 word3”
,然后输出为:

arr[0]=“字1字2”

arr[1]=“word1 word3”

arr[2]=“word1 word2 word3”

arr[3]=“word2 word1”

arr[4]=“word2 word1 word3”

arr[5]=“word2 word3 word1”

arr[6]=“word3 word1”

arr[7]=“word3 word1 word2”

arr[8]=“word3 word2 word1”

这是Java代码:

private static void permute(String[] ss, boolean[] used, String res, int level, List<String> list) {

    if (level == ss.length && res != ""){
        list.add(res);
    return;
    }

    for (int i = 0; i < ss.length; i++) {
        // Check if the string is currently used
        if (used[i]) {
            continue;
        }
        // Check if res is empty or a single word
        if(level > 1)
            list.add(res);
            used[i] = true;
            permute(ss, used, res + " " + ss[i], level + 1, list);
            used[i] = false;
        }
    }

public static List<String> PermuteWords(String s){
    String[] ss = s.split(" ");
    boolean[] used = new boolean[ss.length];
    String res = "";
    List<String> list = new ArrayList<String>();
    permute(ss, used, res, 0, list);
    return list;
}
private static void permute(字符串[]ss,使用了布尔[],字符串res,整数级别,列表){
如果(级别==ss.length&&res!=“”){
列表。添加(res);
返回;
}
对于(int i=0;i1)
列表。添加(res);
used[i]=true;
排列(ss,已用,res+“”+ss[i],级别+1,列表);
used[i]=false;
}
}
公共静态列表PermuteWords(字符串s){
字符串[]ss=s.split(“”);
boolean[]used=新的boolean[ss.length];
字符串res=“”;
列表=新的ArrayList();
排列(ss,used,res,0,list);
退货清单;
}
转换为JS代码时,我不知道代码中有什么错误:

function permute(ss, used, res, level, list){
  if(level==ss.lenght&&res!==""){
      list.add(res);
      return;
  }

  for(var i=0; i<ss.lenght; i++){
      if (used[i]===true){
        continue;
      }

      if(level>1){
        list.add(res);
        used[i]=true;
        permute(ss, used, res+" "+ss[i], level+1, list)
        used[i]=false;
      }
    }
}
function permuteword(s){
  var ss;
  for(var i=0; i<s.length;i++){
      ss[i]=s[i];
  }
  var used;
  for(var j=0; j<s.length;j++){
      used[j]=false;
  }
  var result;
  permute(ss, used, res, 0, result);
  return result;
}
函数排列(ss、已用、res、级别、列表){
如果(级别==ss.lenght&&res!==“”){
列表。添加(res);
返回;
}
对于(var i=0;i1){
列表。添加(res);
used[i]=true;
排列(ss,已用,res+“”+ss[i],级别+1,列表)
used[i]=false;
}
}
}
函数permuteword(s){
var-ss;

对于(var i=0;iJava和Javascript可能听起来几乎相同,但事实并非如此。它们采取不同的方法来做不同的事情。如果在Java中,您正在检查控制台运行程序时的错误,那么在Javascript中,您可以在浏览器控制台中检查错误(使用F12打开控制台)

填充数组
Javascript数组没有
add()
方法。若要向其添加值,请使用
push

list.push(res)


填充数组#2
permuteword()
函数中,您试图填充未初始化的变量
ss
。编译器不理解您要将该值放在哪里。将
ss
初始化为空数组:
var ss=[];


打字错误
的第一个
循环中,您有
ss.lenght
。解决这个问题。始终检查打字错误。

额外的
permuteword()
中,您正在将
res
传递给
permute()
函数,尽管您没有在函数中定义它。如果
res
是在函数外部定义的全局变量,则一切正常。



并利用浏览器控制台。每个Javascript开发人员(从noobie到pro)都会打开它!

我在couchdb和cloudant中运行代码,显示了我没有检查语法的一般错误。我将代码修改为:

function permute(ss, used, res, level, list){
  if(level==ss.lenght&&res!==""){
      list.push(res);
      return;
  }

  for(var i=0; i<ss.length; i++){
      if (used[i]===true){
        continue;
      }

      if(level>1){
        list.push(res);
        used[i]=true;
        permute(ss, used, res+" "+ss[i], level+1, list)
        used[i]=false;
      }
    }
}
function permuteword(s){
  var ss=[];

  for(var i=0; i<s.length;i++){
      ss[i]=s[i];
  }

  var used=[];
  for(var j=0; j<s.length;j++){
      used[j]=false;
  }
  res="";

  var result=[];
  permute(ss, used, res, 0, result);
  return result;
}

function(doc){
  var list=permuteword("word1 word2 word3");
  for(var i=0; i<list.length; i++){
      index("default", list[i],{store, true});
  }
}
函数排列(ss、已用、res、级别、列表){
如果(级别==ss.lenght&&res!==“”){
列表推送(res);
返回;
}
对于(var i=0;i1){
列表推送(res);
used[i]=true;
排列(ss,已用,res+“”+ss[i],级别+1,列表)
used[i]=false;
}
}
}
函数permuteword(s){
var ss=[];

对于(var i=0;我不编写您自己的代码作为答案。您可以编辑问题或添加注释。并查看“已接受的答案”以查看您必须更改哪些内容以避免couchdb错误。代码本身现在很好。代码现在对您有效吗?您应该对此帖子采取行动。询问更多或接受我的答案,这就涵盖了问题。@Mikelis它没有在cloudant中不起作用。我还尝试了一个小样本,它在小样本中起作用。因此我认为permuteword的返回仍然有错误,但我不知道如何修复。最后一个函数没有名称