javascript - 从 Map 获取与所使用的原始键相同但不是引用的值

标签 javascript dictionary ecmascript-6

我正在尝试使用 map而不是我想要拥有复杂键的某些数据的对象。由于我可以使用对象作为映射中的键,因此对我来说这似乎比使用字符串化和连接键的对象键更干净,例如,

const datum = {
  large: 'chunk', 
  of: 'data'
}
const ids = [10797, 11679, 10679, 10160, 11681, 01802]
const view = 142171
const selectedDateRange = 'ONE_MONTH'
const objKey = {
  ids,
  view,
  selectedDateRange
}
const data = new Map()
data.set(objKey, datum)
console.log(data.get(objKey)) // this works and i see the data
const objKeyRef = objKey
console.log(data.get(objKeyRef)) // also works and i see the data

但是,如果将 key 赋予 get ,则它将不起作用没有===所设置的 key 。

data.get({
  ids,
  view,
  selectedDateRange
}) // undefined

这在 the documentation 中很清楚(尽管我并没有真正看到它解释了原因)。我想知道是否有办法解决它。我希望能够稍后组合键并从 map 中获取它们的值。

是否有任何方法可以从映射中获取值,而无需访问 === 的对象用于 set 的 key 是吗?

最佳答案

如果对象是可序列化的,您可以JSON#stringify该对象。因为它是一个字符串,所以当您将来组装它时我们就会工作。

const datum = {
  large: 'chunk', 
  of: 'data'
}
const ids = [10797, 11679, 10679, 10160, 11681, 01802]
const view = 142171
const selectedDateRange = 'ONE_MONTH'
const objKey = {
  ids,
  view,
  selectedDateRange
}
const data = new Map()

data.set(JSON.stringify(objKey), datum)

const result = data.get(JSON.stringify({
  ids,
  view,
  selectedDateRange
}))

console.log(result)

关于javascript - 从 Map 获取与所使用的原始键相同但不是引用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682447/

相关文章:

javascript - 缩小是如何工作的,它会影响 Angular 嵌套对象吗?

r - 如何用R中的表映射替换值

java - 替换字符串中的多个子字符串

javascript - 将 onchange 事件监听器附加到文本区域

javascript - 使用javascript在浏览器中修改url?

javascript - 根据 JavaScript 对象的结果显示/隐藏 div

javascript - 打破 promise 链的好方法是什么?

javascript - 有没有一种简单的方法来合并对象并对它们的 int 属性求和而不是在 javascript es2018 中覆盖?

javascript - JSON 中的条件过滤

python - 字典键字符串