代码之家  ›  专栏  ›  技术社区  ›  four-eyes

在字符串数组中搜索匹配的字符序列

  •  0
  • four-eyes  · 技术社区  · 4 年前

    我有一个这样的数组

    const arr = ["Apple", "Banana", "Cherry", "Orange", "Avocado", "Ananas", "Pineapple];
    

    我需要一个返回 array 所有的元素都来自 arr ,匹配给定的字符序列。人物的顺序很重要。

    鉴于 "ppl" 函数应该返回 ["Apple", "Pineapple"] .

    鉴于 "n" 函数应该返回 ["Banana", "Orange", "Ananas", "Pineapple"] .

    鉴于 "voca" 函数应该返回 ["Avocado"]

    鉴于 "rr" 函数应该返回 ["Cherry"] ,而 "r" 函数应该返回 ["Cherry", "Orange"] .

    5 回复  |  直到 4 年前
        1
  •  1
  •   R4ncid    4 年前

    试试这个

    const arr = ["Apple", "Banana", "Cherry", "Orange", "Avocado", "Ananas", "Pineapple"];
    
    
    const search = query => arr.filter(s => s.toLowerCase().includes(query))
    
    console.log(search("n"))
    console.log(search("ppl"))
        2
  •  1
  •   four-eyes    4 年前

    也有可能是这样

    const arr = ["Apple", "Banana", "Cherry", "Orange", "Avocado", "Ananas", "Pineapple"];
    
    const query = 'pp';
    
    arr.filter(element => element.includes(query));
    
        3
  •  0
  •   Stefan Avramovic    4 年前

    使用filter函数和indexOf非常简单

    const arr = ["Apple", "Banana", "Cherry", "Orange", "Avocado", "Ananas", "Pineapple"];
    const cond = 'ppl'
    console.log(arr.filter(x => x.indexOf(cond) > -1 ))
        4
  •  0
  •   Ansh Chandarana    4 年前
    <script>
    function checkPattern(str, pattern) {
        var len = pattern.length;
    
        if (str.length < len) {
        return false;
        }
    
        for (var i = 0; i < len - 1; i++) {
        var x = pattern[i];
        var y = pattern[i + 1];
    
        var last = str.lastIndexOf(x);
    
        var first = str.indexOf(y);
    
        if (last === -1 || first === -1 || last > first) {
            return false;
        }
        }
    
        return true;
    }
    
    var str = "engineers rock";
    var pattern = "gin";
    
    document.write(checkPattern(str, pattern));
    </script>
    
        5
  •  0
  •   Yosvel Quintero    4 年前

    你可以用 Array.prototype.filter() 与…结合 String.prototype.includes() :

    • const result = arr.filter(el => el.toLowerCase().includes(input.toLowerCase()))

    代码:

    const arr = ["Apple", "Banana", "Cherry", "Orange", "Avocado", "Ananas", "Pineapple"]
    const inputs = ["ppl", "n", "voca", "rr", "r"]
    
    inputs.forEach(input => {
      const result = arr.filter(el => el.toLowerCase().includes(input.toLowerCase()))
      console.log(`Result for ${input}:`, result)
    })