Как отфильтровать значения Map() в JS?

206
18 мая 2018, 08:00

У меня есть Map(), как я могу проверить эту коллекцию, содержит ли она в себе элемент корорый содержит определенный символ? Если другими словами, то например есть такой список: Максим, Иван, Дмитрий, Олег, Алексей. Пользователь вводит какой нибудь символ(например "К") мне надо записать в новый список только те которые содержат этот символ. Т.е. должны записяться Максим и Алексей

        var myMap = new Map();
        var j = 0;
        $('li', "#userlist").each(function () {            
            var user = this.textContent.toLowerCase().trim();
            myMap.set(j, user);
            array[j] = user;
            j++;
        });
var input = $('#search').val().toLowerCase();
var filteredList;
Answer 1

Map, в данном случае не нужен, так как Map с целочисленным ключом - это обычный массив, у которого отсутствует большинство привычных функций.

В случае с массивом можно примерить метод .filter

var filteredList = array.filter(el => el.indexOf(input) > -1);

В случае с Map, есть несколько вариантов

  1. пробежаться по Map и удалить ненужные с помощью методов forEach и delete
  2. с помощью spread оператора получить массив ключей/значений, отфильтровать этот массив, и заново создать Map, например: var m = new Map([...oldMap].filter(el=> el[1].indexOf(input)>-1))
READ ALSO
Проблема с флагами js

Проблема с флагами js

Есть разметка, в которой по очереди меняются предметыСперва записывается в item1, затем в item0, потом опять в item1 и так далее

203
Как передать контекст вызова в функцию прототипа?

Как передать контекст вызова в функцию прототипа?

Не понимаю как передать this в новый объектЕсли это делать из конструктора то все отлично работает а если делать через прототип то нет

194
Валидация на совпадение паролей в форме регистрации,блок отправки при ошибке работает,при совпадении не отправляет

Валидация на совпадение паролей в форме регистрации,блок отправки при ошибке работает,при совпадении не отправляет

Как сделать так что бы при else форма отправлялась пользователю,грубо говоря как выше отменить действие eventpreventDefault(); (return false; не работает) ?

187