【问题标题】:How to check an input words against several arrays in Javascript如何在 Javascript 中针对多个数组检查输入单词
【发布时间】:2015-05-08 12:06:51
【问题描述】:

我需要针对 3 个对象测试输入到输入中的所有单词,并确定它们属于哪个数组,以便我可以将 URL 输出到 API。 我想用 Javascript/jQuery 来实现。

例如,如果输入有这些词:keyword1keyword2keyword3keyword5

所有关键字条目都将从自动完成插件添加。

然后我需要针对 3 个数组对它们进行测试。

var array1 = ["keyword2", "keyword6"];
var array2 = ["keyword3", "keyword4"];
var array3 = ["keyword1", "keyword5"];

我需要确定它们来自哪个数组,以便输出 URL 并将值添加到 URL 中的特定键。

例子:

domain.com/api?array1= [插入关键字] &array2= [插入关键字] &array3= [插入关键字]

关键字需要以数组形式发送,并且必须将空格替换为破折号。

我正在使用 jQuery 执行带有生成 URL 的 GET 请求。

【问题讨论】:

    标签: javascript jquery arrays ajax


    【解决方案1】:

    您可以通过创建数组数组来缩短代码,但这很有效

    var input = "keyword1 keyword2 keyword3 keyword5".split(" ");
    var array1 = ["keyword2", "keyword6"];
    var array2 = ["keyword3", "keyword4"];
    var array3 = ["keyword1", "keyword5"];
    var arr1=[],arr2=[],arr3=[];
    
    $.each(input,function(_,keyword) {
      if ($.inArray(keyword,array1) !=-1) arr1.push(keyword);
      if ($.inArray(keyword,array2) !=-1) arr2.push(keyword);
      if ($.inArray(keyword,array3) !=-1) arr3.push(keyword);
    });
    var url = "domain.com/api/?",keywords="";
    if (arr1.length>0) keywords += "&array1="+arr1.join(",");
    if (arr2.length>0) keywords += "&array2="+arr2.join(",");
    if (arr3.length>0) keywords += "&array3="+arr3.join(",");
    if (keywords.length>0) url += keywords.substring(1).replace(/ /g,"-");
    console.log(url)
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    【讨论】:

    • 对不起。我还没有测试它,我只是在评论它看起来多么容易。我现在已经实现了它并且它有效。感谢您的帮助。
    【解决方案2】:

    你可以把所有的数组对象放到一个父数组中,然后循环

    var parentArray = [
        ["keyword2", "keyword6"],
        ["keyword3", "keyword4"],
        ["keyword1", "keyword5"]
    ]
    
    $.each(parentArray,function(key,value){
        //here you can check
        $.each(value,function(key1,value1){
                if('your key word') ==  value1{
                  // then the array you are looking for would be "key" of that particular loop
                }
        });
    
    
    }); 
    

    编辑:现在,这绝对可以工作

    【讨论】:

    • 是的...我的错,我忘了添加变量...现在检查一下,我已经编辑了它
    • 为什么这被否决了?这是一个聪明的解决方案。除了你的意思是var parentArray = [ array1, array2, array3 ]
    • 现在错别字已得到纠正,这很聪明:) 从 parentArray 中删除最后一个逗号,你就很好了
    • @JeremyThille:谢谢建议
    • 您缺少 URL 中的键 - array1=...&array2=... 这是更复杂的部分
    【解决方案3】:

    这是一个普通的 JS 版本:

    var words = 'keyword1 keyword2 keyword3 keyword5';
    
    // first create an object that contains your arrays
    var dict = {
        array1: ["keyword2", "keyword6"],
        array2: ["keyword3", "keyword4"],
        array3: ["keyword1", "keyword5"]
    }
    
    // start building up a new object that mirrors the existing one
    // but that only contains those keywords that are in the input string
    function buildURLObj(dict, words) {
        var out = {};
    
        // split the keywords string into an array
        words = words.split(' ');
    
        // loop over the object
        for (var p in dict) {
            out[p] = [];
    
            // loop over the array of keywords
            for (var i = 0, l = words.length; i < l; i++) {
    
                // if the keyword in the array, push it to the
                // temporary object
                if (dict[p].indexOf(words[i]) > -1) {
                    out[p].push(words[i]);
                }
            }
        }
    
        // return the completed URL using createURL
        return createURL(out);
    }
    
    // create a URL from the new object
    function createURL(arr) {
        var url = [];
        for (var p in arr) {
    
            // if the array is not empty, don't add it to the completed URL
            // otherwise start building up the URL string
            if [arr[p].length) {
                var subURL = [];
                subURL.push(p);
                subURL.push('[' + arr[p].join('-') + ']');
                url.push(subURL.join('='));
            }
        }
    
        // return the completed URL
        return url.join('&');
    }
    
    // "array1=[keyword2]&array2=[keyword3]&array3=[keyword1-keyword5]"
    buildURL(dict, words);
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      相关资源
      最近更新 更多