【问题标题】:Filter strings in Array based on content (filter search value)根据内容过滤Array中的字符串(过滤搜索值)
【发布时间】:2016-05-16 02:49:17
【问题描述】:

我遇到了一个问题,我在 JS 中有一个类似的字符串数组:

var myArray = ["bedroomone", "bedroomonetwo", "bathroom"];

我想检索数组中包含关键字“卧室”的所有元素。我怎样才能达到这样的效果?

我尝试了不同的方法,但没有得到想要的结果。我应该怎么做?

【问题讨论】:

  • 你试过的代码在哪里?
  • var resultsfilter = myArray.filter(function (element) { return element !== "bedroom"}); console.log(resultsfilter);
  • !== 进行了精确比较。你需要类似/bedroom/.test(element)
  • String.indexOf 已经足够好了。你不需要正则表达式。 developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • var resultsfilter = myArray.filter(function (element) { return /bedroom/.test(element)}); ??????

标签: javascript jquery arrays


【解决方案1】:

String.prototype.indexOf:

var PATTERN = 'bedroom',
    filtered = myArray.filter(function (str) { return str.indexOf(PATTERN) === -1; });

Regexp:

var PATTERN = /bedroom/,
    filtered = myArray.filter(function (str) { return PATTERN.test(str); });

String.prototype.includes(仅在现代浏览器中):

var PATTERN = 'bedroom',
    filtered = myArray.filter(function (str) { return str.includes(PATTERN); });

【讨论】:

    【解决方案2】:
    var bedrooms = myArray.filter(name => name.includes('bedroom'))
    

    【讨论】:

    • 请提供一些信息说明为什么会这样!
    【解决方案3】:

    改进了 Microfed 对此的回答

    var textToSearch = 'bedroom';
    var filteredArray = myArray.filter((str)=>{
      return str.toLowerCase().indexOf(textToSearch.toLowerCase()) >= 0; 
    });
    

    【讨论】:

      【解决方案4】:

      使用 JavaScript 箭头函数要简单得多

      const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
      
      const result = words.filter(word => word.length > 6);
      
      console.log(result);
      // expected output: Array ["exuberant", "destruction", "present"]
      
      // search using keyword from array
      
      var keywordToSearch = 'Arslan'; // word to search
      var keyword =   keywordToSearch.toLowerCase();
      var names = [{id: 1, name: 'Aqib'}, {id: 2, name: 'Arslan'}];
      
      //search keyword from names array by name
      var searchResult = names.filter(word => word.name.toLowerCase().indexOf(keyword) > -1);
      console.log(searchResult);
      // expected output: > Array [Object { id: 2, name: "Arslan" }]
      Using javascript arrow function 

      【讨论】:

      • 如果我有搜索数组:keywordToSearch =['test','something']。我该如何解决这个问题?
      【解决方案5】:

      你也可以使用 search() 方法

      在正则表达式搜索中找到第一个匹配的子字符串。

      (方法) String.search(regexp: string | RegExp): number (+1 重载)

      const filterList = (data, query) => {
              return data.filter(name => name.toLowerCase().search(query.toLowerCase()) !== -1);
            };
      

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 1970-01-01
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 2012-12-06
        相关资源
        最近更新 更多