Javascript 数组排列/组合

Javascript 数组排列/组合,javascript,arrays,string,algorithm,Javascript,Arrays,String,Algorithm,我试图找到检查字符串是否为 等于单个索引处的数组值 等于数组的置换 等于值的任意组合。 3.1这可能包括数组值与单词之间空格的组合。 3.2这可能包括数组值的组合,单词之间没有空格 数组值本身没有空格或特殊字符 每个数组值都是唯一的。没有重复的值 字符串中的单词永远不会超过两个 字符串中永远不会有特殊字符,但可以有空格 有什么想法吗 示例数据: var stringExample = "application Name"; var arrayExample = ['app', 'applica

我试图找到检查字符串是否为

  • 等于单个索引处的数组值
  • 等于数组的置换
  • 等于值的任意组合。
    3.1这可能包括数组值与单词之间空格的组合。
    3.2这可能包括数组值的组合,单词之间没有空格
  • 数组值本身没有空格或特殊字符
  • 每个数组值都是唯一的。没有重复的值
  • 字符串中的单词永远不会超过两个
  • 字符串中永远不会有特殊字符,但可以有空格
  • 有什么想法吗

    示例数据:

    var stringExample = "application Name";
    
    var arrayExample = ['app', 'application', 'name'];
    
    普苏埃多:

    for (var i = 0; i < arrayExample.length; i++) {
         if (stringExample.toLower() == arrayExample[i]) {
              return true;
         } elseif (stringExample.toLower() == "Any Combination of array values with spaces or
                           without spaces in between") { return true };
    }
    
    for(变量i=0;i
    因此,如果完整字符串及其部分被空格分割,则匹配它们非常容易:

    var stringExample=“应用程序名称”;
    var example2=“应用程序王”;
    var example3=“应用程序”;
    var example4=“一些随机字符串”;
    var arrayExample=['app','application','name'];
    函数findMatch(字符串、数组){
    var a1=string.toLowerCase().split(“”);
    var匹配=假;
    //创建数组只是为了检查每个字符串部分是否在数组中
    var匹配=[];
    对于(var j=0;jlog(example4+“不匹配:”+findMatch(example4,arrayExample))显然,输入字符串中的一个单词可能需要两个或多个数组元素的串联才能被视为匹配。这可能是需求中最棘手的部分

    其次,似乎一旦一个单词与一个(或多个)数组值匹配,这些数组元素就不应该再用于另一个匹配

    我建议使用普通对象将数组值存储为属性。这将允许快速查找,并且删除(为了满足上面的第二点)也可以非常有效地完成。为了实现第一个需求,我将坚持使用蛮力方法。或者,您可以构建一个应用程序,但在您从中受益之前,您需要大量的投入,所以我不建议这样做

    在找到单词(部分)的潜在匹配项后,可以使用递归为较小的问题找到解决方案

    下面是一个EcmaScript 3解决方案,它实现了这些想法:

    功能匹配(str、arr){
    var words=str.toLowerCase().split(/\s+/);
    var键={};
    对于(var i=0;i=words.length)返回true;
    变量词=词[i];
    if(键[word]){//首先尝试完全匹配-相对较快的操作
    关键字[字]=0;
    if(重现(i+1))返回true;
    关键字[word]=1;//回溯:还原关键字
    }else{//尝试部分匹配-操作相对较慢
    for(变量键入键){
    如果(!keys[key]| word.slice(0,key.length)!==key)继续;
    关键字[字]=0;
    字[i]=字片(键长);
    如果(重现(i))返回true;
    words[i]=word;//回溯:还原word
    关键字[word]=1;//回溯:还原关键字
    }
    }
    返回false;
    }
    复发率(0);
    }
    var str=“应用程序名称”;
    var arr=['nam','me','applica','app','application','na'];
    
    控制台日志(匹配(str,arr))我回来后会实现和测试,但这看起来非常好。非常感谢。谢谢你的耐心和教训,我今天学到了很多。