【问题标题】:AngularJS filter multiple words from a string in a single fieldAngularJS 从单个字段中的字符串中过滤多个单词
【发布时间】:2016-05-19 21:28:59
【问题描述】:

这是我的问题的想法:

想象一下,我有一个用户正在寻找一本书。

作为输入,他可以尝试使用书名来查找书籍。

让我们来:

  $scope.books = ["Heir Of Earth",
    "Woman Of The Solstice",
    "Hunters Of Next Year",
    "Pilots Without Honor",
    "Slaves And A Woman",
    "Kings And Heroes",
    "Decay Of The End",
    "Fortune Of The Land",
    "Rejecting My Dreams",
    "Painting The Angels"];

现在我将用户查询放在一个字符串中:

示例:

$scope.userQueryTitle = "Woman Of";

我想获取标题包含“Woman”或“Of”但不包含“Woman”和“Of”的所有书籍。

从那里,相应的结果应该是这样的:

$scope.booksResult = ["Heir Of Earth",
"Woman Of The Solstice",
"Hunters Of Next Year",
"Slaves And A Woman",
"Decay Of The End",
"Fortune Of The Land"
];

我找到了一些部分解决我的问题的方法,例如使用类似的东西:

查看:

<ul ng-repeat="book in booksResult | filter: getBooksFromTitle">
    <li>{{book}}</li>
</ul>

控制器:

$scope.getBooksFromTitle = function(book){
    return book.match(($scope.userQueryTitle).split(" ")[0]) || 
        book.match(($scope.userQueryTitle).split(" ")[1]);
};

仅当 $scope.userQueryTitle 仅包含 2 个单词但 我的问题是 如果我有 14 怎么办>n 个单词?

getBooksFromTitle() 应该对此很灵活,但我不知道如何处理......

有什么建议吗?

谢谢!

【问题讨论】:

  • 您可以尝试以下方法...在您的 getBooksFromTitle 方法中,您可以将 $scope.userQueryTitle 转换为数组并比较两个数组。

标签: javascript angularjs angularjs-ng-repeat angular-filters


【解决方案1】:

这将为您完成:

$scope.getBooksFromTitle = function(book){
     var queryWords = $scope.userQueryTitle.split(" ");
     for(var i=0;i<queryWords.length;i++){
         return book.match(queryWords[i]);
     }        
};

【讨论】:

  • 不,它不起作用,因为该函数在第一个 return book.match(queryWords[i]); 发生时停止。结果,我只得到一个结果。
【解决方案2】:

如下改变getBooksFromTitle函数,

$scope.getBooksFromTitle = function(book){
    return $scope.books.filter(function(e){ return e.match(new RegExp($scope.query.split(" ").join('|'),'i')) });
};

尝试输入尽可能多的关键字,这应该可以解决您的问题。干杯

【讨论】:

  • 非常感谢!它有效,我只是对我不完全理解这行代码在做什么这一事实感到麻烦。
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 2023-02-07
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多