多个搜索功能通过数组



我正在尝试搜索多个值列表。

这是值的示例:

[
    {
    "color":"blue",
    "medium":"Sculpture",
    "place":"Garage"
    }
    {
    "color":"red",
    "medium":"Painting",
    "place":"Pool"
    }
]

以下是我的代码。可以找到一个值得一提的很棒。但是我需要找到多个值。例如,我需要查看并找到诸如:"红色蓝色"或"蓝色绘画"的查询结果。

它应该返回具有两个字的结果。

我真的不知道如何解决这个问题,有人有一个想法吗?非常感谢

function search(){
    var search = $('#search').val();
    if(search.length < 1) {
      return null;
    };
    var searches = search.split(" ");
    var fields = ["color","medium","place"]; 
    var results = [];
    $.each(searches, function(i, word){
      var wordResult = searchInJson(word,fields,json);
      if( wordResult.length > 0 ) {
        results.push(wordResult);
      }
    });
    var results = searchInJson(searches,fields,json);
    displaySearchResults(results);
};
function searchInJson(search,fields,json) {
    var regex = new RegExp(search);
    var results = [];
    $.each(json, function(i, image){
      $.each(fields, function(j, fieldname){
        var field = image[fieldname];
        if (regex.test(field)) {
          results.push( image );
        }
      });
    });
    return results;
}

这是一种快速尝试:

var list = [
    {
    "color":"blue",
    "medium":"Sculpture",
    "place":"Garage"
    },
    {
    "color":"red",
    "medium":"Painting",
    "place":"Pool"
    }
];
var search = "red painting";
var results = list.filter(function (el) {
  var s = search.toLowerCase().split(" ");
  for (var key in el) {
    for (var i=0; i < s.length; i++) {
      if (el[key].toLowerCase() == s[i]) {  // this could use indexOf depending on if you want to match partial words
        s.splice(i,1);
        i--;
        if (!s.length) return true;
      }
    }
  }
  return false;
});
console.log(results);

最新更新