【问题标题】:Map entries Transitive Operation? [duplicate]映射条目传递操作? [复制]
【发布时间】:2020-07-25 15:59:46
【问题描述】:

我希望能够从地图中快速获取条目集。但是entries 函数返回一个迭代器。那不是我想要的。当然,我可以编写一个函数来遍历条目并将其构建到一个条目集中,但是让我的函数说:

return map.entries();

而不是

return buildEntriesArray(map);

似乎没有一种干净的方法来围绕迭代器问题进行编码,除了将其包装在一堆装饰调用中,用于各种不一致的迭代器/条目集 API cruft。

let a = [["foo.com", 32], ["bar.foo.com", 12]];
let m = new Map(a);
// add to map, etc.
let entries = Object.entries(Object.fromEntries(m.entries()));

我怎样才能让它更干净?

【问题讨论】:

  • [...iterator] 从中创建一个数组...

标签: javascript coding-style code-cleanup


【解决方案1】:
let entries = Array.from(m.entries());

【讨论】:

  • 也可以[...m.entries()]。此外,如果您正在寻找干净、可读的代码,始终使用const,尽可能不要使用let - let 警告读者您可能是 i> 重新分配变量名。
  • let 不会警告您可能正在重新分配变量名。事实上,let 声明将导致错误,如果已经在词法环境记录上存在绑定。 ``` 变量 a = 1;让 a = 2; // 错误。 ```
  • 我是从 代码阅读器 的角度讨论的 - 任何时候使用 let,您都是在告诉正在阅读代码的任何人您可能正在重新分配变量。解释器警告/错误与它无关。当您改用const 时,代码阅读者的认知开销会减少。您正在考虑的重新声明与重新分配相同。重新赋值只需要= 赋值运算符。
  • @Garrett 您混淆了重新分配和重新声明。分配一个变量只是给它一个值x = 1 重新分配是给它一个新值x = 2。而已。 let 允许您重新分配值。重新声明正在尝试创建一个具有相同名称的新变量let x; let x 是重新声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多