繁体   English   中英

如何遍历 Typescript 中的 map:for...in? 为了……的? 为每个?

How to iterate through a map in Typescript: for…in? for…of? forEach?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图了解在 Typescript 中迭代 map 的语法。 我的 map 中的键是字符串。 这些值为字符串的 arrays。

这是一些示例代码:

let attributeMap: Map<string, string[]> = new Map<string, string[]>();

// sample data
let sampleKey1 = "bob";

// populate map
let value: string[] = attributeMap.get(sampleKey1) || [];
value.push("clever");
attributeMap.set(sampleKey1, value);

value = attributeMap.get(sampleKey1) || [];
value.push("funny");
attributeMap.set(sampleKey1, value);


// try looping through the map
for (let key in attributeMap) {
    console.log(attributeMap.get(key));
    console.log("WE'RE IN THE MAP!");
}

console.log("done");

当我运行这段代码时,唯一打印的是“完成”。

为什么 map 中没有任何内容被打印,也没有“我们在地图中”的消息? 就好像永远不会进入 for 循环一样。 为什么会这样,我将如何解决这个问题?

1 个回复

当您将密钥设置为 Maps 时,密钥不会被放入 Map 实例 - 它们内部存储在 Map 中,并且只能通过使用各种 Z46F3EA056CAA3126B91F3F70BEEA068C 迭代方法之一访问。 for..in直接在object 或其原型上迭代属性。

要遍历 Map,请尝试以下操作:

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

当您的集合是一个普通的 object 本身具有键值对的 object 时, for..in是有意义的,但不适用于以不同方式存储数据的 Maps。

当属性直接位于 object 上时,语法通常如下所示:

someObj.someProp = 'someVal';

这会将someProp属性放到someObj object 上。

但是地图将其数据存储在 Map 的 [[MapData]]内部插槽中,而不是直接存储在 Map 的不同属性上。

就像理论练习一样,在 JS 中,您可以将属性直接放在 Map 实例上,然后用for..in对其进行迭代(基本上,将 map 滥用为 ZA8CFDE6331BD59EB2666F8911CB 拥有:

const map = new Map();
map.foo = 'bar';
for (const prop in map) {
  // ...
}

但这是一种反模式,永远不应该这样做。 Either use an object and set/retrieve properties with dot and bracket notation (and other object methods like Object.entries ), or use a Map and set/retrieve properties with Map.get and Map.set and the other Map methods.

1 如何遍历 Typescript map 中的 n 个键

我正在使用 Typescript,并且我有许多键值对的 map。 我现在尝试仅访问 map 中的前 10 个键值对。 我有一个经过 10 次迭代的 for 循环,但我似乎无法弄清楚如何从 map 访问键值对。 我现在只遍历第一个键值对键 10 次。 还有另一种方法可以通过 map 到达 go 并且只 ...

2 遍历打字稿中的地图对象列表

我有一个打字稿,它调用 java 类中的 API 方法。 此方法返回地图列表。 打字稿文件看起来像这样:在这个我试图从dataBody检索数据,但是当我遍历它时,它显示 [Object Object],我想看看在打字稿文件端需要做什么来检索数据从 Java 类设置。 Java类: ...

3 如何遍历java中的Map?

我需要遍历BucketMap并获取所有keys但是我如何在不手动操作的情况下获得诸如buckets[i].next.next.next.key类的东西,就像我在这里尝试的那样: public String[] getAllKeys() { //index of string array "a ...

5 如何在For子中使用Foreach迭代地图?

我给“ MAP”作为foreach的输入: 基于“ Sum”值,我需要将每个记录发送到两个不同的文件中。 我触动的地方是我不知道如何在foreach,when和logger语句中写问号的地方编写这些条件语句。 请对此提出建议,如果您知道如果输入“ CSV”则如何编写条件语句,请 ...

6 如何迭代嵌套映射

我在bean中有一个Map如下: 此ftqSet适合以下数据结构: 在我的测试JSP文件中,我一直在尝试使用&lt;c:forEach&gt;访问数据: 但它没有输出${f.feedId} 。 为什么会这样? 我如何访问这个结构的各个元素,以便创建一个漂亮的表? ...

7 矢量地图的地图如何通过地图的地图进行迭代

我试图在C ++中没有7个循环的情况下从矢量地图的地图的地图的地图的地图中收集所有数据。 数据外观如下: 因此,我试图将所有地图中的所有Elem 1,Elem 2收集到一张地图中。 有人可以帮我做这个,而不是通过每个映射进行明显的循环并在C ++中导致7个循环吗? 谢谢 ...

9 如何在不使用foreach的情况下遍历Dictionary

我不确定标题是否写得很好,很抱歉。 我基本上有一堆列出通信目标的元素。 尽管我愿意将它们移至其他数据结构,但仍将它们放入字典中。 我的问题是我有一个树状结构,其中一个键是一个分支,每个分支都有很多叶子。 分支和叶子的名称都存储在字符串中(不能为数字)。 对于字典中的每个元素, ...

10 如何在MyBatis foreach中迭代HashMap?

我正在尝试在mybatis中生成如下所示的sql。 我的输入参数类型是HashMap。 现在如何从mapper xml文件生成SQL。 下面的代码抛出异常,说map被评估为null。 另一种方法是创建一个具有键值字段的类,创建一个对象列表,然后将parameterType作为 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM