获取字符串javascript的所有变体

时间:2014-11-17 18:52:00

标签: javascript

我想获得某个字符串的所有变体。这个字符串将用破折号分解。这些字母只能在这些破折号内变化。

例如,假设我通过DFI3-334-FG12然后我想获取该字符串的所有变体,例如:

FI3-334-G12
FI3-334-F12
FI3-334-FG2
FI3-334-FG1
DI3-334-G12
DI3-334-F12
DI3-334-FG2
DI3-334-FG1
DF3-334-G12
DF3-334-F12
DF3-334-FG2
DF3-334-FG1
DFI-334-G12
DFI-334-F12
DFI-334-FG2
DFI-334-FG1

有人可以协助吗?我尝试过循环,但我只能将其分解并获得不同的部分:

FI3,DI3,DF3,DFI
334
G12,F12,FG2,FG1

这是我的代码:

        $('#filter').on('click',function() {
            var input = $('#code').val();
            var parts = input.split("-");
            var fixed = Array();
            for(var i=0;i<parts.length; i++) {
                if(parts[i].length != 3) {
                    k = 0;
                    fixed[i] = new Array();
                    for(var c=0;c<parts[i].length;c++) {
                        fixed[i][k] = parts[i].replace(parts[i].charAt(c),"");
                        k++;
                    }
                } else {
                    fixed[i] = parts[i];
                }
            }
            var final = Array();
            $.each(fixed,function(i) {
                $('#code_result').append(fixed[i] + "<br>");
            })
        });

2 个答案:

答案 0 :(得分:0)

    var string= 'DFI3-334-FG12';
    var parts = string.split('-');
    for(var i=0;i<parts[0].length;i++)
        for(var j=0;j<parts[2].length;j++){
            p1 = parts[0].substring(0,i)+parts[0].substring(i+1,parts[0].length);
            p2 = parts[2].substring(0,j)+parts[2].substring(j+1,parts[2].length);
            console.log(p1+'-'+parts[1]+'-'+p2);    
        }

答案 1 :(得分:0)

如果你知道有多少段(在这种情况下为3),你可以使用循环来获得所有可能的组合。

请参阅我的示例:

http://jsfiddle.net/a6647m9e/1/

for(var i=0; i<parts[0].length; ++i) {
  for(var j=0; j<parts[1].length; ++j) {
      for(var k=0; k<parts[2].length; ++k) {
          strings.push(parts[0][i]+'-'+parts[1][j]+'-'+parts[2][k]);
      }
  }
}

只是你知道,你正在查看(2^parts[0].length - 1) * (2^parts[1].length - 1) * (2^parts[2].length - 1)组合(在这种情况下为1575),取出空白组合。

注意:这完全取决于您对&#34;所有可能组合的定义&#34;是