我有一个以对象为键的地图。例如:{date:“ 01/01/1990”,idActiv:“ 4”}。
然后作为值,我有一个表示True或False的字符串(“ T”或“ F”)。我的目标是在给定密钥的情况下更新该值。
var mapElem = new Map();
mapElem.set({date: "08/06/2020", idActiv: "1"}, "T");
mapElem.set({date: "18/06/2020", idActiv: "3"}, "T");
如何使用对象密钥{date:“ 08/06/2020”,idActiv:“ 1”}更新地图?
如果我这样做:
mapElem.set({date: "08/06/2020", idActiv: "1"},"F");
我将重复输入键盘(Mozilla Firefox控制台):
mapElem.set({date: "08/06/2020", idActiv: "1"},"F");
Map(3)
size: 3
<entries>
0: Object { date: "08/06/2020", idActiv: "1" } → "T"
1: Object { date: "18/06/2020", idActiv: "3" } → "T"
2: Object { date: "08/06/2020", idActiv: "1" } → "F"
答案 0 :(得分:0)
您必须将对象存储为{date: "08/06/2020", idActiv: "1"}
孤单表达式在某处创建新实例
const obj1 = {date: "08/06/2020", idActiv: "1"};
const obj2 = {date: "18/06/2020", idActiv: "3"}
var mapElem = new Map();
mapElem.set(obj1, "T");
// mapElem.set(obj1.valueOf(), "T"); // equivalent
mapElem.set(obj2, "T");
// mapElem.set(obj2.valueOf(), "T"); // equivalent
mapElem.set(obj1, "F");
// mapElem.set(obj1.valueOf(), "F"); // equivalent
console.log([...mapElem.entries()]);
答案 1 :(得分:0)
由于Object是引用类型,因此即使具有相同属性的2个对象(基本上是2个相同的对象)也不同,因为它们是2个不同的引用。 以下内容应该可以正常工作,因为它们使用与地图中的键相同的Object(相同的引用)
var mapElem = new Map();
const key1 = {date: "08/06/2020", idActiv: "1"};
const key2 = {date: "18/06/2020", idActiv: "3"};
mapElem.set(key1, "T");
mapElem.set(key2, "T");
稍后可以使用相同的引用键来更新Map中的值-
mapElem.set(key1,"F");
或者,如果用例不需要将键作为对象,则可以在将对象JSON.stringify(object)
用作键之前对其进行序列化