【问题标题】:How to update the value of a javascript map with object key如何使用对象键更新 javascript 映射的值
【发布时间】:2020-09-27 09:08:21
【问题描述】:

我有一个以对象为键的地图。例如:{date:"01/01/1990", idActiv:"4"}。

然后作为一个值,我有一个代表真假的字符串(“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"
​


【问题讨论】:

标签: javascript dictionary jsp key


【解决方案1】:

您必须将对象存储为 {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()]);

【讨论】:

  • 那行得通。但我有 $.each。所以如果我只声明一次引用 obj1,mapElem 只有一个元素。
  • 您能详细说明一下吗?
【解决方案2】:

由于 Object 是一种引用类型,即使具有相同属性的 2 个对象(基本上是 2 个相同的对象)也是不同的,因为它们是 2 个不同的引用。 以下应该可以工作,因为它们使用相同的对象(相同的引用)作为地图中的键

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)用作键之前将其序列化

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2016-05-05
    相关资源
    最近更新 更多