繁体   English   中英

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

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

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

我试图了解在 Typescript 中遍历地图的语法。 我地图中的键是字符串。 这些值是字符串数组。

下面是一些示例代码:

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");

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

为什么地图中没有任何内容被打印,“我们在地图中”的消息也没有打印? 就好像从未进入 for 循环一样。 为什么会这样,我该如何解决?

1 个回复

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

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

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

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

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

someObj.someProp = 'someVal';

这会将someProp属性放到someObj对象上。

但是 Maps 将它们的数据存储在 Map 的 [[MapData]]内部槽中,而不是直接存储在 Map 的不同属性上。

作为理论练习,在 JS 中,您可以将属性直接放在 Map 实例上,然后使用for..in对其进行迭代(基本上,将地图作为具有自己属性的对象滥用):

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

但这是一种非常反模式,永远不应该这样做。 要么使用对象并使用点和括号表示法(以及其他对象方法,如Object.entries )设置/检索属性,要么使用 Map 并使用Map.getMap.set以及其他 Map 方法设置/检索属性。

1 如何遍历 Typescript 映射中的 n 个键

我正在使用 Typescript,并且我有一个包含许多键值对的映射。 我现在试图仅访问该映射中的前 10 个键值对。 我有一个经过 10 次迭代的 for 循环,但我似乎无法弄清楚如何从地图访问键值对。 我现在只遍历第一个键值对键 10 次。 有没有另一种方法可以通过地图并只选择 n 个键值对? ...

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个循环吗? 谢谢 ...

8 如何遍历枚举并使用ForEach填充列表?

我有一个枚举DemoElements ,它包含三个变量: title , icon和description (均为String类型)。 理想情况下,在我的SwiftUI列表中,我想这样填充它: 从这里,我的ElementRow视图提取每个变量( elem.title , elem.icon和 ...

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