【问题标题】:How to filter out text that contains one or more of the following words如何过滤掉包含以下一个或多个单词的文本
【发布时间】:2015-04-01 14:41:38
【问题描述】:

如果我有一个对象数组

var obj = [{
  text: "Hello my name is none of your business"
  },
  { 
  text: "This is the second text of this object, hello"
  },
  { 
  text: "This is the third text of this object, hello"
  },{ 
  text: "This is a copy of the third text of this object, hello"
  }];

如何过滤掉所有包含关键字不一定按顺序排列的对象?提供了一个 jsfiddle 以供进一步澄清

例如

  • 用户搜索“this”,过滤器返回第二、第三和第四个文本

  • 用户搜索“第三个副本”,过滤器只返回第四个文本,

问题在于,使用基本过滤器(下面的示例)似乎可以搜索准确的短语。例如“第三个副本”将返回一个空结果。用户必须输入“第三个副本”才能返回结果。

JSFiddle:http://jsfiddle.net/mpm2uamf/

我想在所有单个空格上使用 split 函数,然后使用 Regex 以某种方式循环该函数...但我显然不知道我在做什么

.filter('searchBody', function(){
return function(elements, input){


  if(input !== undefined){
    var inputs = input.split(" ");

  }
  var filtered = [];
  // loop through user inputs and make them optional in RegExp?
  var letterMatch = new RegExp(inputs, 'i');
  for(var i = 0; i < elements.length; i++){
    var element = elements[i];
    if( letterMatch.test(element.body)){
      filtered.push(element);
    }
  }
  return filtered;
};
})

谁能给我提示或解释如何做到这一点?

【问题讨论】:

    标签: angularjs filter


    【解决方案1】:

    我创建了一个自定义过滤器:

    app.filter('multipleTags', function($filter) {
      return function multipleTags(items, predicates) {
        predicates = predicates.split(',')
    
        angular.forEach(predicates, function(predicate) {
          items = $filter('filter')(items, predicate.trim())
        })
        return items;
      }
    })
    

    http://plnkr.co/edit/ZhnuM0WW3GZS5QLxK98t?p=preview

    虽然我的代码是为逗号分隔的标签设计的,但在你的情况下它可以用于空格

    【讨论】:

    • 哇,这太完美了,非常感谢!你确实让我免于许多痛苦。如果我有至少 15 个代表,我会投票赞成哈。但是一旦我被允许,我肯定会选择这个作为答案。感谢您的快速响应。
    • 我找这个已经一两天了。很棒的过滤器。一次为我解决了9个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2015-08-09
    • 2020-03-02
    相关资源
    最近更新 更多