@eldenhard2

Как реализовать поиск по массиву с последующем добавлением класса соответствующим объектам?

Требуется создать приложение, выводящее список email из массива emails. которое позволяет выполнять поиск по этому списку. email в списке, которые содержат строку из поля поиска, должны выделяться классом

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <link rel="stylesheet" href="/assets/styles/index.css" />
    <title>MarkedList</title>
    <style>
      .marked {
        color: #efc14e;
      }
    </style>
  </head>
  <body>
    <div id="app" style="margin-top: 2rem">
      <div class="container">
        <div class="form-group">
          <input type="search" v-model="search"/>
        </div>
        <ul v-for="email in emails">
          <li :class="{ marked: isActive }">{{email}}</li>
        </ul>

      </div>
    </div>
   
    <script type="module" src="./script.js"></script>
  </body>
</html>


let vm = createApp({
  data(){
    return{
      emails:[
        'Eliseo@gardner.biz',
        'Jayne_Kuhic@sydney.com',
        'Nikita@garfield.biz',
        'Lew@alysha.tv',
        'Hayden@althea.biz',
        'Presley.Mueller@myrl.com',
        'Dallas@ole.me',
        'Mallory_Kunze@marie.org',
        'Meghan_Littel@rene.us',
        'Carmen_Keeling@caroline.name',
        'Veronica_Goodwin@timmothy.net',
        'Oswald.Vandervort@leanne.org',
        'Kariane@jadyn.tv',
        'Nathan@solon.io',
        'Maynard.Hodkiewicz@roberta.com',
        'Christine@ayana.info',
        'Preston_Hudson@blaise.tv',
        'Vincenza_Klocko@albertha.name',
        'Madelynn.Gorczany@darion.biz',
        'Mariana_Orn@preston.org',
        'Noemie@marques.me',
        'Khalil@emile.co.uk',
        'Sophia@arianna.co.uk',
        'Jeffery@juwan.us',
        'Isaias_Kuhic@jarrett.net',
      ],
      search: '',
      isActive: false
    }
  },
  computed: {
    SearchEmail(){
       this.emails.filter(function (email) {
        return email.class = "marked"
      })
    },

  }
    
}).mount('#app')
  • Вопрос задан
  • 170 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
computed: {
  bullshitEmails() {
    const search = this.search.trim().toLowerCase();
    return this.emails.map(n => ({
      email: n,
      marked: !!search && n.toLowerCase().includes(search),
    }));
  },
},

<ul>
  <li
    v-for="{ email, marked } in bullshitEmails"
    v-text="email"
    :class="{ marked }"
  ></li>
</ul>
Ответ написан
Комментировать
Сделайте computed свойство emailObjects
которое получается из исходного массива emails примерно так:
emailObjects() {
  return this.emails.map(email => ({
    email,
    isActive: email.includes(this.search),
  });
},
т.е. тут вместо массива просто-email'ов делается массив объектов, где и email и свойство isActive, которое для данного адреса означает, включает он искомое или нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы