当前位置: 首页 > news >正文

简洁大方的网站模板带会员中心的淘宝客wordpress

简洁大方的网站模板,带会员中心的淘宝客wordpress,网站搬家数据库配置,找客源免费用哪个软件好JavaScript Set数据结构专题 #x1f3b2; 在前八篇文章中#xff0c;我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型、Object高级特性和Array高级操作。今天#xff0c;让我们深入了解JavaScript中的Set数据结构。Set是…JavaScript Set数据结构专题 在前八篇文章中我们探讨了JavaScript的语言特性、ECMAScript标准、引擎工作原理、数值类型、字符串处理、Symbol类型、Object高级特性和Array高级操作。今天让我们深入了解JavaScript中的Set数据结构。Set是ES6引入的一种新的集合类型它允许你存储任何类型的唯一值。 Set基础概念 小知识Set是一个值的集合其中的每个值只能出现一次。这个特性使它特别适合用于去重和集合运算。与Array不同Set不是索引集合它更关注值的唯一性。 Set的创建和基本操作 // 1. Set的创建方式 function setCreation() {// 空Setconst set1 new Set();// 从数组创建const set2 new Set([1, 2, 3, 3, 4]); // 重复的3只会保留一个// 从字符串创建const set3 new Set(hello); // Set(4) {h, e, l, o}// 从其他可迭代对象创建const map new Map([[a, 1], [b, 2]]);const set4 new Set(map.keys());// 基本操作set1.add(1); // 添加值set1.delete(1); // 删除值set1.has(1); // 检查值是否存在set1.clear(); // 清空Setconsole.log(set1.size); // 获取大小 }// 2. Set的迭代 function setIteration() {const set new Set([a, b, c]);// forEach方法set.forEach((value, valueAgain, set) {console.log(value); // value和valueAgain是相同的});// for...of循环for (const value of set) {console.log(value);}// 转换为数组const array [...set];const array2 Array.from(set);// 获取迭代器const values set.values();const entries set.entries();// entries()返回[value, value]形式的条目for (const [value1, value2] of entries) {console.log(value1 value2); // true} }// 3. Set的值比较 function setValueComparison() {const set new Set();// NaN的处理set.add(NaN);set.add(NaN);console.log(set.size); // 1NaN被认为是相同的值// 0和-0的处理set.add(0);set.add(-0);console.log(set.size); // 10和-0被认为是相同的值// 对象的处理const obj1 { id: 1 };const obj2 { id: 1 };set.add(obj1);set.add(obj2);console.log(set.size); // 2不同对象被认为是不同的值 }Set的高级操作 // 1. 集合运算 class SetOperations {// 并集static union(setA, setB) {return new Set([...setA, ...setB]);}// 交集static intersection(setA, setB) {return new Set([...setA].filter(x setB.has(x)));}// 差集static difference(setA, setB) {return new Set([...setA].filter(x !setB.has(x)));}// 对称差集static symmetricDifference(setA, setB) {return new Set([...setA].filter(x !setB.has(x)).concat([...setB].filter(x !setA.has(x))));}// 子集检查static isSubset(setA, setB) {return [...setA].every(x setB.has(x));}// 超集检查static isSuperset(setA, setB) {return [...setB].every(x setA.has(x));} }// 2. 自定义Set操作 class CustomSet extends Set {// 添加多个值addMany(...items) {items.forEach(item this.add(item));return this;}// 删除多个值deleteMany(...items) {items.forEach(item this.delete(item));return this;}// 过滤操作filter(callback) {const filteredSet new CustomSet();for (const value of this) {if (callback(value)) {filteredSet.add(value);}}return filteredSet;}// 映射操作map(callback) {const mappedSet new CustomSet();for (const value of this) {mappedSet.add(callback(value));}return mappedSet;}// 转换为对象toObject(keyFn value value) {const obj {};for (const value of this) {obj[keyFn(value)] value;}return obj;} }// 3. Set与数组的互操作 class SetArrayOperations {// 数组去重static uniqueArray(arr) {return [...new Set(arr)];}// 查找重复元素static findDuplicates(arr) {const seen new Set();const duplicates new Set();arr.forEach(item {if (seen.has(item)) {duplicates.add(item);} else {seen.add(item);}});return duplicates;}// 保持插入顺序的唯一化static uniqueOrdered(arr) {return Array.from(new Set(arr));} }Set的实际应用 让我们看看Set在实际开发中的一些应用场景 // 1. 标签系统 class TagSystem {constructor() {this.tagSets new Map();}// 添加标签addTags(itemId, ...tags) {if (!this.tagSets.has(itemId)) {this.tagSets.set(itemId, new Set());}tags.forEach(tag this.tagSets.get(itemId).add(tag));}// 移除标签removeTags(itemId, ...tags) {const tagSet this.tagSets.get(itemId);if (tagSet) {tags.forEach(tag tagSet.delete(tag));}}// 获取具有特定标签的项目getItemsWithTags(...tags) {const items [];for (const [itemId, tagSet] of this.tagSets) {if (tags.every(tag tagSet.has(tag))) {items.push(itemId);}}return items;}// 获取相关标签getRelatedTags(tag) {const relatedTags new Set();for (const tagSet of this.tagSets.values()) {if (tagSet.has(tag)) {tagSet.forEach(t {if (t ! tag) relatedTags.add(t);});}}return relatedTags;} }// 2. 用户权限系统 class PermissionSystem {constructor() {this.userPermissions new Map();this.rolePermissions new Map();}// 添加角色权限addRolePermissions(role, ...permissions) {if (!this.rolePermissions.has(role)) {this.rolePermissions.set(role, new Set());}permissions.forEach(perm this.rolePermissions.get(role).add(perm));}// 分配用户角色assignUserRoles(userId, ...roles) {if (!this.userPermissions.has(userId)) {this.userPermissions.set(userId, new Set());}const userPerms this.userPermissions.get(userId);roles.forEach(role {const rolePerms this.rolePermissions.get(role);if (rolePerms) {rolePerms.forEach(perm userPerms.add(perm));}});}// 检查权限hasPermission(userId, permission) {const userPerms this.userPermissions.get(userId);return userPerms ? userPerms.has(permission) : false;} }// 3. 缓存系统 class CacheSystem {constructor(maxSize 1000) {this.maxSize maxSize;this.cache new Map();this.accessOrder new Set();}get(key) {if (this.cache.has(key)) {// 更新访问顺序this.accessOrder.delete(key);this.accessOrder.add(key);return this.cache.get(key);}return null;}set(key, value) {if (this.cache.size this.maxSize !this.cache.has(key)) {// 移除最早访问的项const oldestKey this.accessOrder.values().next().value;this.accessOrder.delete(oldestKey);this.cache.delete(oldestKey);}this.cache.set(key, value);this.accessOrder.delete(key);this.accessOrder.add(key);} }性能优化 ⚡ 处理Set时的一些性能优化技巧 // 1. Set大小优化 function setSizeOptimization() {// 预分配合适的大小const initialData new Array(1000).fill(0).map((_, i) i);// 一次性创建Setconst set new Set(initialData); // 比循环添加更快// 避免频繁修改const tempArray [];for (let i 0; i 1000; i) {tempArray.push(i);}const set2 new Set(tempArray); }// 2. Set操作优化 class OptimizedSetOperations {// 优化的交集操作static optimizedIntersection(setA, setB) {// 选择较小的集合进行迭代const [smaller, bigger] setA.size setB.size ? [setA, setB] : [setB, setA];return new Set([...smaller].filter(x bigger.has(x)));}// 批量操作优化static batchAdd(set, items) {const tempSet new Set(set);items.forEach(item tempSet.add(item));return tempSet;} }// 3. 内存优化 class MemoryEfficientSet {constructor() {this.set new Set();this.weakRefs new WeakMap();}addObject(obj) {const ref new WeakRef(obj);this.weakRefs.set(obj, ref);this.set.add(ref);}hasObject(obj) {const ref this.weakRefs.get(obj);return ref this.set.has(ref) ref.deref() obj;} }最佳实践建议 Set使用场景 // 1. 数据去重 function deduplication() {// 基本类型去重const numbers [1, 2, 2, 3, 3, 4];const uniqueNumbers [...new Set(numbers)];// 对象去重const objects [{ id: 1, name: A },{ id: 1, name: A },{ id: 2, name: B }];const uniqueById [...new Set(objects.map(obj JSON.stringify(obj)))].map(str JSON.parse(str)); }// 2. 集合运算 function setOperations() {const set1 new Set([1, 2, 3]);const set2 new Set([2, 3, 4]);// 并集const union new Set([...set1, ...set2]);// 交集const intersection new Set([...set1].filter(x set2.has(x)));// 差集const difference new Set([...set1].filter(x !set2.has(x))); }// 3. 唯一性检查 function uniquenessChecking() {const visited new Set();function isUnique(item) {if (visited.has(item)) return false;visited.add(item);return true;} }错误处理和验证 // 1. Set验证 function validateSet(set) {if (!(set instanceof Set)) {throw new TypeError(参数必须是Set类型);}if (set.size 0) {throw new Error(Set不能为空);}return true; }// 2. 安全的Set操作 function safeSetOperations() {function safeAdd(set, value) {try {set.add(value);return true;} catch (error) {console.error(添加值失败:, error);return false;}}function safeDelete(set, value) {try {return set.delete(value);} catch (error) {console.error(删除值失败:, error);return false;}} }// 3. 类型检查 function setTypeChecking() {function isNumberSet(set) {return set instanceof Set [...set].every(x typeof x number);}function isObjectSet(set) {return set instanceof Set [...set].every(x x typeof x object);} }结语 JavaScript的Set数据结构为我们提供了一种优雅的方式来处理唯一值的集合。我们学习了 Set的基本概念和操作Set的高级操作和扩展实际应用场景性能优化技巧最佳实践和注意事项 学习建议在使用Set时要充分利用其唯一性特征选择合适的场景使用。注意Set的值比较规则特别是在处理对象时。同时要考虑性能影响合理使用Set的各种操作方法。 如果你觉得这篇文章有帮助欢迎点赞收藏也期待在评论区看到你的想法和建议 终身学习共同成长。 咱们下一期见
http://www.hkea.cn/news/14319154/

相关文章:

  • 什么叫seo网站推广职场社交网站怎么做
  • 重庆市建设项目环境影响评价网站织梦源码免费下载
  • 平台型网站建设网站定制业务
  • ps做网站首页怎么运用起来wordpress 解析漏洞
  • 网站升级建设招标公告网站收录免费咨询
  • 移动电商网站开发企业服务有限公司
  • 整合营销策略seo优化就业前景
  • 网站建设培训学校服务器创建多个网站
  • 深圳那家做网站好合肥小程序建设
  • 二级域名网站如何申请吗设计方案文本
  • 企业网站设计推荐汕头网站建设模板
  • 怎么用个人电脑做网站icp备案添加网站
  • 做网站什么程序做外贸首先要做网站
  • 如何建立网站建设方案长沙建网
  • 汕头网站建设方案开发中企网站建设
  • 啥是深圳网站建设萝岗哪家网站建设好
  • 做的好的自驾游网站抖音代运营包含哪些服务
  • 好的网站开发wordpress图片中文
  • 夹娃娃网站如何做wordpress段落间距调整
  • 贵阳58同城做网站做视频推广有哪几个网站
  • 网站建设打不开全国广告公司网站建设
  • seo工具排行榜seo的目的是什么
  • 广西网站建设哪家有windows 7 wordpress
  • 宜阳网站建设重庆建筑工程网站
  • 河间做网站的公司东莞网站建设做公司
  • 有没有专门做二手的网站wordpress 笑话模板
  • 绍兴企业网站建站模板购物网站 建站服务
  • 无锡好的网站公司asp.net建立网站
  • wordpress的集成环境莆田seo接单
  • 济源市住房和城乡建设局网站wordpress h5模板