Карта объекта, удалить элементы в одном цикле - PullRequest
0 голосов
/ 24 апреля 2018

Что такое краткий и эффективный способ удаления элементов объекта Map в одном цикле при некотором условии?

Итерации с записями карты () могут это сделать, но вызов записи () на каждой итерации не выглядит эффективным

let name_value_map = new Map([['One', 1], ['Two', 2], ['Three', 3], ['Four', 4]])

for (let pair of name_value_map.entries())
     if (pair[1] <= 3)
         name_value_map.delete(pair[0])

Другие идеи?

Ответы [ 4 ]

0 голосов
/ 24 апреля 2018

Использование entries и filter вместе с оператором распространения ...

name_value_map = new Map([...name_value_map.entries()].filter( s => s[1] > 3 ));

Демо

var name_value_map = new Map([
  ['One', 1],
  ['Two', 2],
  ['Three', 3],
  ['Four', 4]
]);

name_value_map = new Map([...name_value_map.entries()].filter(s => s[1] > 3));

console.log(name_value_map); //check the browser's console
0 голосов
/ 24 апреля 2018

Используйте метод Map.forEach():

const name_value_map = new Map([['One', 1], ['Two', 2], ['Three', 3], ['Four', 4]]);

name_value_map.forEach((v, k, m) => v <= 3 && m.delete(k));

console.log([...name_value_map.entries()]); // SO console doesn't display Map
0 голосов
/ 24 апреля 2018

Вы можете использовать Array.from, затем использовать .filter и преобразовать обратно в Map. Это не приведет к изменению оригинального Map.

Метод Array.from () создает новый экземпляр Array из массива или повторяемого объекта.

let name_value_map = new Map([['One', 1], ['Two', 2], ['Three', 3], ['Four', 4]])

const filtered = new Map(
	Array.from(name_value_map).filter(([,value]) => value > 3)
);
  
console.log([...filtered.entries()])
0 голосов
/ 24 апреля 2018

Почему бы не использовать объект?

const ob = {
    One: 1,
    Two: 2,
    Three: 3,
    Four: 4
};

for (const key of Object.keys(ob)) {
    if (ob[key] <= 3)
        delete ob[key];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...