Фильтровать массив по ключевому слову - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь написать функцию поиска для таблицы данных, у меня есть коллекция объектов массива, и я предпочел бы искать весь объект, но сейчас я ищу определенные ключи. Код ниже, кажется, не работает правильно.

Я пробовал следующие js:

searchResults() {

   if (!this.searchTable) this.fetch_bet_data();

   const searchableKeys = ["username", "bet_id"];

   this.bets = this.bets.filter(bet => {

      return searchableKeys.some(key => {

         return bet[key].toLowerCase().includes(this.searchTable);

      });

   });

},

Так что он работает через Bet_ID, но через имя пользователя. Он получает ключевое слово из окна поиска

<input type="text" v-model="searchTable" class="form-control" placeholder="Search">
   <div class="input-group-btn">
      <button class="btn btn-success" @click="searchResults()" type="submit">
         <i class="glyphicon glyphicon-search"></i>
      </button>
   </div>

Идеальный мир Я бы хотел просто обыскать весь объект, но сейчас просто заставить его работать на том, что я объявил, было бы здорово

Пример объекта:

bet_amount: "0.0000001" 
bet_id: "fe5f40-3ea93b" 
client_seed: "hash" 
created_at: 1547739644 
high: false 
multiplier: "2.00" 
nonce: 119
 profit: "-0.0000001" 
result: 
false roll: 80.82 
server_seed: "Seed is active needs to change server seed to reveal." server_seed_hash: "hash" 
threshold: 49.5 
user_id: "id" 
username: "graham"

1 Ответ

0 голосов
/ 18 января 2019

Одна проблема, которую я вижу с вашим подходом.

Вы присваиваете отфильтрованные результаты для this.bets, что означает, что он будет продолжать фильтровать по предыдущим фильтрам. Вы должны присвоить отфильтрованный результат новой переменной.

Вот рабочий пример.

let bets = [
  {
    bet_amount: "0.0000001",
    bet_id: "fe5f40-3ea93b",
    client_seed: "hash",
    username: "graham"
  },
  {
    bet_amount: "0.0000002",
    bet_id: "kjs93f-sflll0",
    client_seed: "hash",
    username: "roller"
  },
  {
    bet_amount: "0.0000003",
    bet_id: "099s99-lpap11",
    client_seed: "hash",
    username: "card"
  }
]

function searchResults() {
  //if (!this.searchTable) this.fetch_bet_data();

  const searchableKeys = ["username", "bet_id"];

  let results = bets.filter(bet => {
    return searchableKeys.some(key => {
      return bet[key].toLowerCase().includes(document.getElementById("theInput").value);
    });
  });
  console.log(results);
}
<input id="theInput" type="text" v-model="searchTable" class="form-control" placeholder="Search">
<div class="input-group-btn">
  <button class="btn btn-success" onClick="searchResults()" type="submit">
         <i class="glyphicon glyphicon-search">Search</i>
      </button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...