internmap

中文文档
2.0.3发布于 2021/09/20ISCES Module零依赖近 30 天下载 3.7亿

自动密钥间隔的映射和设定

中文使用文档

实习地图

现场实例见https://observatorablehq.com/@mbostock/internmap.

如果您在 JavaScript 映射中将日期作为密钥( 或作为 Set 中的值) , 您可能会惊讶它不会像你预期的那样工作 .

dateMap = new Map([
  [new Date(Date.UTC(2001, 0, 1)), "red"],
  [new Date(Date.UTC(2001, 0, 1)), "green"] // distinct key!
])
dateMap.get(new Date(Date.UTC(2001, 0, 1))) // undefined!

因为地图使用 相同的ValueZero算法 确定关键平等:要将两个日期视为相同日期,它们必须是同一个实例(同一个目标),而不是仅仅同一个时间。 平等经营者也是如此.

{
  const date1 = new Date(Date.UTC(2001, 0, 1));
  const date2 = new Date(Date.UTC(2001, 0, 1));
  return date1 === date2; // false!
}

可以通过使用数字或字符串等原始值取而代之来避免这个问题. 不过, (在从地图上取出密钥时 地图钥匙或 地图进入,或者在地图上徘徊的时候 上面的倒数是新的日期( N)键) (中文(简体) ). 另外,如果你忘记在使用时将钥匙按到数字 地图因为地图不会出错; 它只会返回未定义的地图

numberMap = new Map([[978307200000, "red"]])
numberMap.get(978307200000) // "red"
numberMap.get(new Date(978307200000)) // undefined; oops!

如果地图与设定“只是工作”日期, 或者任何支持对象 对象价值? 吗?

输入 实习地图。 。 。 . 实习 指只存储每个不同密钥的一个副本。 InternMap认为代表同一时刻的两个Date例是等同的,只存储初审.

map = new InternMap([
  [new Date(Date.UTC(2001, 0, 1)), "red"],
  [new Date(Date.UTC(2001, 0, 1)), "green"] // replaces previous entry
])
map.get(new Date(Date.UTC(2001, 0, 1))) // "green"
[...map.keys()] // [2001-01-01]

InternMap 扩展了地图, 所以只要你喜欢这样的行为, 就可以直接放进去。 因为实习医生打电话来 对象仅对非原始密钥的值,注意您也可以通过原始密钥.

map.get(978307200000) // "green"; this works too!

InternMap根据其相關原始价值只保留了第一个显著的密钥. 避免在地图上添加不一致类型的密钥.

map2 = new InternMap([
  [978307200000, "red"], // danger!
  [new Date(Date.UTC(2001, 0, 1)), "blue"]
])
map2.get(new Date(Date.UTC(2001, 0, 1))) // "blue"; this still works…
[...map2.keys()] // [978307200000]; but the key isn’t a Date

当 InternMap 使用时 对象.valueOf 默认计算 intern 密钥,您可以将一个密钥函数作为第二个参数传递给构建者以改变行为. 例如,如果使用JSON.stringify,可以使用数组作为复合键(假设数组元素可以被序列化为JSON).

map3 = new InternMap([
  [["foo", "bar"], 1],
  [["foo", "baz"], 2],
  [["goo", "bee"], 3]
], JSON.stringify)
map3.get(["foo", "baz"]) // 2

有个 实习班 课,太.

set = new InternSet([
  new Date(Date.UTC(2000, 0, 1)),
  new Date(Date.UTC(2001, 0, 1)),
  new Date(Date.UTC(2001, 0, 1))
])

版本与发布记录

internmap 共发布 6 个版本,首次发布于 2021/01/22;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.3latest2021/09/205 年前
2.0.22021/09/195 年前
2.0.12021/06/065 年前
2.0.02021/06/045 年前
1.0.12021/03/115 年前
1.0.02021/01/225 年前

关于 internmap 的常见问题

internmap 是什么?

自动密钥间隔的映射和设定

如何安装 internmap?

在项目目录运行 npm install internmap,或使用 pnpm add / yarn add / bun add。

internmap 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/internmap 是否存在。

internmap 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

internmap 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=12。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

internmap 可以商用吗?

internmap 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

internmap 的下载量有多少?

根据 npm 官方下载统计,internmap 在 2026/10/06 – 2026/11/04 这 30 天内被下载 372,633,298 次,日均约 12,421,110 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

internmap 还在维护吗?

最新版本 2.0.3 发布于 2021/09/20(5 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/01/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。