Javascript 如何迭代Map()对象?

Javascript 如何迭代Map()对象?,javascript,reactjs,Javascript,Reactjs,我需要迭代一个Map()对象,这样我就可以得到一周中的一天和一个选定的小时。下面的代码不起作用,因为Object.keys(newFieldReservationPrice).forEach正在尝试循环一个Map()对象,这似乎毫无意义。那么,有更好的解决方案吗 代码如下: handlePriceInput = (e, hour, day) => { let value = e.target.value const newFieldReservationPrice = this.stat

我需要迭代一个Map()对象,这样我就可以得到一周中的一天和一个选定的小时。下面的代码不起作用,因为
Object.keys(newFieldReservationPrice).forEach
正在尝试循环一个Map()对象,这似乎毫无意义。那么,有更好的解决方案吗

代码如下:

handlePriceInput = (e, hour, day) => {
let value = e.target.value

const newFieldReservationPrice = this.state.newFieldReservationPrice
console.log('newFieldReservationPrice', newFieldReservationPrice) // A Map();
let map;

if (!newFieldReservationPrice instanceof Map) {
  console.log('!== Map')
  console.log('newFieldReservationPrice is a Map()? inside if ()', newFieldReservationPrice)
  if (newFieldReservationPrice[day] && newFieldReservationPrice[day][hour]) {
      newFieldReservationPrice[day][hour] = Number(value)
  } 
} else {
  map = new Map();
  console.log('map object', Object.keys(newFieldReservationPrice)) // logs map object []

  Object.keys(newFieldReservationPrice).forEach(key => {
    console.log('key', key)
      map.set(key, new Map(Object.entries(newFieldReservationPrice[key])));
  }); // This doesn't work
  console.log('Am I a Map()? map', map)

  const aux = map.get(day)
  console.log('aux day', aux) // A Map()
  aux.set(hour, Number(value)) // Comes as undefined || Cannot read property 'set' of undefined
  console.log('aux set', aux) // A Map()

  map.set(day, aux);
  console.log('what do I have?', map)

}
const isReservationPrice = !newFieldReservationPrice instanceof Map ? newFieldReservationPrice : map
console.log('isReservationPrice', isReservationPrice)

this.setState({
  newFieldReservationPrice: isReservationPrice
})
}

谢谢!:)

Map
s提供了三种获取迭代器内容的方法:

  • -迭代映射中的键
  • -迭代值
  • -迭代键和值,为您提供
    [key,value]
    数组(这是默认值)
Map
s还提供,它循环遍历它们的内容,将值、键和Map作为参数提供给回调

使用适合您的用例的一个。例如,如果您试图替换
Object.keys
,请使用
keys
。类似地,如果您希望在映射中使用条目(我注意到您在某一点上使用了
Object.entries
),请使用
entries
或默认迭代器

请注意,在代码中的一些地方,您似乎试图使用
[]
索引到映射中。这不适用于地图,您需要使用
get

下面是一个使用默认迭代器的简单示例(也是从
条目
获得的迭代器):

const map=newmap();
映射集(1,“一”);//打电话时也可以包括这些
映射集(2,“两”);//构造函数,但我想
地图集(3,“三”);//避免混淆
for(map的const[key,value]){//使用默认迭代器(可以是`map.entries()`代替)
log(`key${key}的值是${value}`);

}
您可以使用for of迭代一个
映射
对象:

for (const [key, value] of myMap) {
  console.log(key, value);
}
这与迭代条目相同:

for (const [key, value] of myMap.entries()) {
  console.log(key, value);
}
正如@Nina Scholz所说,您可以在
Map
prototype()上使用
forEach


您可以直接使用并迭代
地图。

在询问问题之前在谷歌上搜索一下可能的重复:。不完全重复,所以不标记为重复,因为我不知道为什么,使用
Object.entries(newFieldReservationPrice)。forEach
对我不起作用。
Object.keys(newFieldReservationPrice.forEach)也一样。谢谢您的解释。你的意思是像
map.set(key,newmap(Object.entries(newFieldReservationPrice.get(key)))
?@RCohen-你想用
newmap(Object.entries(newFieldReservationPrice.get(key)))做什么?
?就像你说的,把[key]索引到map中是行不通的。这里的想法是:-星期一:-08:00:10(在这一天和小时中存储10)获取日期和小时,在本例中是08:00以保存新值。使用
newFieldReservationPrice.forEach
I迭代hours@RCohen-是的,但是为什么要根据结果创建地图?但是是的,我的意思是使用
newFieldReservationPrice.get(key)
而不是
newFieldReservationPrice[key]
。其余部分对我来说没有意义,因为它假定存储在
newFieldReservationPrice
中的值不是映射(因为它使用
Object.entries
),但是您在
newFieldReservationPrice
中将一个映射设置为一个值。这是因为这是作为对象从数据库中获取的数据,我需要将其作为映射发送回。这就是我这么做的原因。这是我找到的一种方法,也许不是最好的@克劳德
myMap.forEach((value, key, map) => {
  console.log(key, value);
}