使用值数组过滤多个属性的值

1 javascript json filtering underscore.js lodash

因此,我真的想从我之前失败的问题中复制一份,因为我无法正确解释自己,因此没有得到答案(并没有真正解决我的问题).

有JSON:

[
  {
    "id": 2,
    "name": "Google",
    "country": "Sweden"
  },
  {
    "id": 3,
    "name": "Google",
    "country": "USA"
  },
  {
    "id": 9,
    "name": "Google",
    "country": "Ukraine"
  },
  {
    "id": 10,
    "name": "Bing",
    "country": "Sweden"
  }
]
Run Code Online (Sandbox Code Playgroud)

我之前没想做的就是发布我到目前为止的内容并更好地解释我需要什么.这就是我现在所拥有的:

 $scope.loadSearchEngines = function ($query) {
     return $http.get('search-engines.json', {cache: true}).then(function (response) {
         var tags = response.data;
         return tags.filter(function (tag) {
             return tag.name.toLowerCase().indexOf($query.toLowerCase()) != -1;
         });
     });
 };
Run Code Online (Sandbox Code Playgroud)

这个过滤器限制我只搜索name属性,而理想情况下我想搜索任何属性(或者所有属性,而不是),我希望过滤器使用一个参数数组,这样每个单词都会单独查看对象中的每个属性并找到匹配项.

在上一篇文章中,一个人为它发布了一个for循环,但这正是我想要避免的那种不直观的事情.我知道我想要的结果是什么,但我只是想不出一种方法(lodash/underscore似乎差不多做了类似的事情,但我觉得某些地方缺少某些东西,或者我对理解这些文档非常不好).

例子:

如果我写"谷歌瑞典",它只会显示1个结果,如果我写"瑞典",它会显示谷歌和bing的那个.如果我写"in",它应该显示"bINg"和google"ukraINe"我猜.

这开始似乎不那么麻烦,但我无法用过滤器真正地围绕这个.我真的没有任何想法发帖,因为他们一直很尴尬,这对我来说是一个非常灰暗的地方.

Gru*_*nny 5

从问题看,您看起来好像要过滤每个项目中的值包含每个关键字的列表:

    var keywords = ['Google', 'Sweden'];

    var result = _.filter(data, function(item){
        return _.every(keywords, function(keyword){
            return _.some(item, function(value){
                return _.isString(value) && value.indexOf(keyword) != -1;
            })
        });
    });
Run Code Online (Sandbox Code Playgroud)