javascript - 使用空终止迭代javascript map.values() 迭代器是个坏主意吗?
问题描述
我对 Javascript 还很陌生,目前正在处理一堆 linting 错误。寻求明确这一点。
我有一个格式为 [int, object] 的地图,该地图是通过 JSON.parse-ing 来自服务器的一些数据并放入键值映射中获得的。
我需要遍历对象集。据我了解, this:
for(item in/of map) {}
性能不高,最好使用迭代器。
const iterator = map.values();
当我使用和测试使用我的地图值的迭代器时
while(!iterator.done) {
iterator.next();
}
我发现这无限循环,首先通过地图,然后通过“未定义”。
我目前的解决方案如下:
let item;
const iterator = map.values();
while ((item = iterator.next().value) != null) {
// do stuff with item
}
这感觉像是一个合理的解决方案,但我希望能清楚地了解 while 循环内的赋值或依赖空终止在 javascript 中是否是一个坏主意;或者是否有更惯用的解决方案?
解决方案
我认为大多数开发人员都会:
let value;
Object.keys(obj).forEach((key) => { value = obj[key]; console.log(value)});
对于这样一个常见的用例,处理迭代器的内部有点笨拙。
推荐阅读
- php - 如果 (is_page_template()) 在 header.php 中不起作用
- java - 您如何为跨包的多个存储库集中一个配置?
- python - 如何使用 Django 文件存储在 API 和 Worker 之间共享文件
- android - 如何实现将文本跟踪到语音,以便显示正在读取的行
- python - 如何将我的输入设置为 Python 中已经存在的变量?
- jquery - 在现有项目中实施引导选择
- node.js - 包含箭头函数捕获“this”的全局值
- php - 比较两个 DateTime 对象的 PHP 性能负载
- c# - 如何调试 UWP 应用的后台服务(IBackgroundTask)?
- r - 你能列出一个 tidyselect `everything()` 的例外吗