如何根据值对象的属性从地图中删除元素

时间:2018-10-27 21:58:54

标签: javascript object

myMap.set(id, {x: 10, y: 20})
myMap.delete(id)

如何根据值对象的属性从Map中删除元素?例如,在上述代码中,不是基于键删除,而是基于x从值中删除

1 个答案:

答案 0 :(得分:2)

您必须遍历地图的entries并找到具有您想要的值的地图,然后从地图中删除关联的键:

const map = new Map();
const id = 'foo';
map.set(id, {x: 10, y: 20});
console.log(map.size);

const foundIdEntry = [...map.entries()]
  .find(([, { x }]) => x === 10);
if (foundIdEntry) map.delete(foundIdEntry[0]);

console.log(map.size);

也就是说,如果您必须定期执行类似的操作,那么重新考虑数据结构可能会好得多-您可能想要一个键为Map的{​​{1}} ,而不是其键是ID:

x

或者,在为地图设置值时,还要在一个单独的对象中设置一个键值对,该对象将map.set(10, { id: 'foo', y: 20 }); 映射到与其关联的x,以便将来可以访问它使用简单的属性查找,而不是id

.find