расширенный поиск с вычисляемым свойством vuejs - PullRequest
0 голосов
/ 19 октября 2018

Привет, ребята. У меня есть свойство данных с именем searchQuery, а также вычисляемое свойство, которое выполняет поиск как по имени элемента, так и по ключевому слову в массиве templateArray, и возвращает шаблоны обратно.Работает отлично.Однако я пытаюсь сделать это немного более надежным.Вот мое вычисляемое свойство

  searchResults: function(){
      return this.filteredTemplateArray.filter((template)=>{
        return template.itemName.toLowerCase().includes(this.searchQuery.toLowerCase())
          || template.keywordArray.toString().toLowerCase().includes(this.searchQuery.toLowerCase());
      })
  }

, каждый шаблон возвращается как объект, который содержит массив с именем keywordArray, содержащий в нем.объект выглядит следующим образом:

0:Object
categoryArray:Array[0]
dateAdded:"2016-05-27 10:16:56"
id:"15"
itemId:"73076"
itemName:"Colorful Trans"
keywordArray:Array[2]
0:"Water"
1:"Sparkles"
projectPath:"M:/Projects/Generics/CreativeEngine/2016/ColorfulImageTrans-Scott/ColorfulImageTrans.aep"
renderTime:"30"
stillImageLocation:"12.90"
tested:"1"
thumbName:"COLORFULIMAGETRANS"

В основном, я хочу сделать, если он не возвращает результатов для template.keywordArray.toString().toLowerCase().includes(this.searchQuery.toLowerCase()) Я хочу искать каждое слово, разделенное пробелом, как если бы это был его собственный searchQuery.Например, прямо сейчас, если я наберу блестки, я получу результат.если я набираю воду, я получаю результат, но если я печатаю воду, то результаты не возвращаются.если у searchQuery есть пробел, ищите ключевое слово Array для воды и блесток.

1 Ответ

0 голосов
/ 19 октября 2018

someArray.toString возвращает элементы массива, разделенные запятой ,, поэтому попробуйте заменить эту запятую на пробел следующим образом:

template.keywordArray.toString().replace(","," ").toLowerCase().includes(this.searchQuery.toLowerCase());

, если искомые слова не в порядкеможно использовать следующий подход:

this.searchQuery.toLowerCase().split(' ').every(val => {
  return template.keywordArray.toString().toLowerCase().split(',').filter(item => {
    return item.includes(val)
  }).length !== 0;
})
/***OR directly search in keywordArray***/
this.searchQuery.toLowerCase().split(' ').every(val => {
  return template.keywordArray.filter(item => {
    return item.includes(val)
  }).length !== 0;
})

Пример кода:

var items = ["aaa", "bbb", "ccc", "ddd"]
var s = "aaa bb"
var f = s.split(" ").every(st => {
  return items.filter(item => {
    return item.includes(st)
  }).length !== 0;
})
console.log(f)
...