问题:在 JavaScript 中,可以创建一个模拟集合行为的数据结构,提供具有以下功能:
实现这种类似集合的功能的最佳方法是什么?使用一个对象,并且键存储属性且值全部设置为 true,这是一个合理的解决方案吗?
答案:
在 ES6 环境中,您可以利用内置 Set 对象,它提供了所有所需的功能。
对于 ES5 及以下版本:
使用对象:
创建一个带有代表值的键且始终设置为 true 的对象可以用于简单的任务,但它有局限性。例如,您需要使用 if (obj[key]) 而不是更简洁的 if (key in obj) 检查真实性。此外,这种方法将所有键强制为字符串,如果您同时拥有应该表现不同的数字键和字符串键,则会出现问题。
考虑这个修改后的基于对象的解决方案,它可以解决其中一些问题:
// create empty object var obj = {}; // or create an object with some items already in it var obj = { "1": true, "2": true, "3": true, "9": true }; // Question 1: Is A in the list? if (Object.prototype.hasOwnProperty.call(obj, A)) // put code here // Question 2: Delete 'A' from the list if it's there delete obj[A]; // Question 3: Add 'A' to the list if it's not already there obj[A] = true;
预构建的集合对象:
如果您更喜欢现成的解决方案,您可以使用预构建的集合对象,例如 miniSet 或更功能丰富的集合对象。它们提供了一个简单的接口来执行集合操作。
ES6 Set Polyfill:
为了实现 ES6 兼容性,您可以使用像 ES6 Set polyfill 这样的 Polyfill。这允许您编写可在 IE7 环境中运行的 ES6 兼容代码,但它并不能完全体现原生 ES6 Set 对象的易用性。
以上是如何在 JavaScript 中实现类似集合的功能?的详细内容。更多信息请关注PHP中文网其他相关文章!