从Map获取与使用的原始密钥相同但不是引用的值

时间:2017-06-21 17:19:14

标签: 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

但是,如果get的密钥没有===设置的密钥,则无效。

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

这在the documentation中很明显(虽然我没有真正看到它解释了原因)。我想知道是否有办法绕过它。我希望能够在以后编写密钥并从地图中获取它们的价值。

有没有办法从地图中获取值而无法访问===密钥用于set的对象?

1 个答案:

答案 0 :(得分:0)

如果对象是可序列化的,则可以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)