JavaScript 不提供内置 Set 对象,但开发人员通常需要能够通过快速查找来存储唯一的无序值,添加和删除功能。
使用具有布尔值的对象:
正如问题中所建议的,可以使用对象来模仿集合。键代表值,并且值都设置为true(或任何非空值)。这种方法提供了快速的查找和删除,但随着键数量的增加,添加变得更慢。
ES6 Set Object:
如果您的环境支持 ES6(例如,现代浏览器或转译)代码),您可以使用内置的 Set 对象。它对所有集合操作都具有出色的性能,并且还允许轻松迭代元素并避免字符串强制。
Polyfills 和预构建对象:
对于不支持的环境ES6,您可以使用像“ES6-Set”这样的 polyfill 或像“miniSet”或“set.js”这样的预构建对象,它们提供与 ES6 Set 对象类似的功能。这些提供了一些优点,例如与旧版浏览器兼容或较小的代码占用空间。
实现详细信息:
使用对象:
const setObj = {};
setObj["item1"] = true;
if ("item1" in setObj) { // fast lookup
console.log("Item found");
}
delete setObj["item1"]; // fast deletion
使用ES6 Set对象:
const set = new Set();
set.add("item1");
if (set.has("item1")) { // fast lookup
console.log("Item found");
}
set.delete("item1"); // fast deletion
使用 Polyfill:
import Set from "es6-set";
const set = new Set(["item1", "item2"]);
console.log(...set.keys()); // easy iteration
使用预先构建的对象:
const miniSet = new MiniSet("item1", "item2");
if (miniSet.has("item1")) { // fast lookup
console.log("Item found");
}
miniSet.remove("item1"); // fast deletion
最佳选择取决于具体要求和您环境中可用的支持。对于复杂或性能关键的应用程序,ES6 Set 对象是理想的选择。否则,使用对象、polyfill 或预构建的集合对象可以提供合理的解决方案。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3