Удалить на карте, не удаляя ключ, который является объектом - PullRequest
0 голосов
/ 16 января 2019

Я создал объект карты

var map_obj = new Map();
map_obj.set({'a':2, 'b':3}, {'c': 4});

теперь, когда я пытался использовать .delete оператор

map_obj.delete({'a':2, 'b':3})

Он показывает мне ложь и ключ и значение не удаляются. Может случиться так, что он проверяет ссылку на объект и создает новый объект, поэтому не может найти равный объект. В MDN guide сказано, что ключ может быть любого типа. Так что же здесь происходит, и как правильно удалить ключ?

Так процесс удаления определяется в es-6

Ответы [ 2 ]

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

Самый простой способ - сохранить ссылку на объект в переменной.

var map_obj = new Map(),
    object = { a: 2, b: 3 };

map_obj.set(object, {'c': 4});
console.log([...map_obj]);

map_obj.delete(object);
console.log([...map_obj]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Если у вас есть только части объекта, вам нужно найти этот объект путем сравнения объекта.

var map_obj = new Map(),
    a = 2, b = 3,
    key;

map_obj.set({ a: 2, b: 3 }, {'c': 4});
console.log([...map_obj]);

key = Array.from(map_obj.keys()).find(o => o.a === a && o.b === b);

map_obj.delete(key);
console.log([...map_obj]);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 16 января 2019

Проблема в том, что при вызове map_obj.delete({'a':2, 'b':3}) вы вызываете его с новым объектом. Попробуйте:

var map_obj = new Map();
x = {'a':2, 'b':3};
map_obj.set(x, {'c': 4});
//...
map_obj.delete(x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...