【问题标题】:how to use 'getOwnPropertyNames' to iterate through contents of a map如何使用“getOwnPropertyNames”遍历地图的内容
【发布时间】:2018-05-20 02:08:57
【问题描述】:

我在下面的代码部分发布了地图。如图所示,我向地图添加了一些值。但是当我尝试使用显示地图的内容时 'getOwnPropertyNames' 如代码所示,循环中的日志语句不显示任何内容。

请告诉我如何正确使用“getOwnPropertyNames”

代码

const mymap = new Map();

const mapKeyToValue = (key, value) => {
  mymap.set(key, value);
};

const getMyMap = () => mymap;

mapKeyToValue('1', [{ 'a': 10, 'b': 100, 'c': 1000 }]);
mapKeyToValue('2', [{ 'a': 20, 'b': 200, 'c': 2000 }]);
mapKeyToValue('3', [{ 'a': 30, 'b': 300, 'c': 3000 }]);
mapKeyToValue('4', [{ 'a': 40, 'b': 400, 'c': 4000 }]);


console.log(Object.getOwnPropertyNames(mymap));//displays []

Object.getOwnPropertyNames(mymap).forEach( (v) => {
  console.log(mymap[v]);//displays nothing
});

【问题讨论】:

  • 你使用getOwnPropertyNames的目的是什么?
  • @ChrisR 实际上,在另一个代码中,我有一个映射或者它可能是一个数组,我对它包含的键一无所知..所以我决定做一个测试来了解我怎么能遍历地图中的键

标签: javascript dictionary properties es6-map


【解决方案1】:

地图没有属性(仅限于字符串和符号键)。它将元素存储在内部。要遍历 Map,请使用其 entriesvalueskeys 或带有 for … of 循环的隐式迭代器方法:

for (const [key, value] of mymap) {
    console.log(key, value);
}

【讨论】:

  • 那么,getOwnPropertyNames 应该只与数组一起使用吗?
  • 呃,getOwnPropertyNames 甚至不应该与数组一起使用。数组使用标准 for (let i=0; i<arr.length; i++)for (const val of arr) 语法进行迭代。
  • 您能告诉我,我应该将 getOwnPropertyNames 用于哪种数据结构?
  • @LetsamrIt 这意味着作为任意对象的反射方法(主要是那些 for … in 由于可枚举性而不适合的对象),不一定适用于用作数据结构的东西。
  • @LetsamrIt 当然,Array.isArray(x)x instanceof Map (or worse) 可以。不过,一般来说,您应该设计代码,以便知道变量的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2020-09-18
  • 2011-06-18
相关资源
最近更新 更多