如何使用对象键更新javascript映射的值

时间:2020-06-08 11:51:31

标签: javascript dictionary jsp key

我有一个以对象为键的地图。例如:{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"
​


2 个答案:

答案 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)用作键之前对其进行序列化