es6学习笔记整理(九)set-map数据结构

本文详细介绍了JavaScript中的Set和Map数据结构的用法,包括定义、基本操作如添加、删除、查询,以及遍历方法等。此外还对比了它们与WeakSet、WeakMap的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set的用法

set是一种集合;类似数组,不同的是set集合中的元素不能重复
有两种定义方式:
第一种:定义时不加参数

            let list = new Set();
            list.add(1);
            list.add(2);
            console.log(list.size);//2

第一种:定义时加参数

            let arr = [1,2,3,4,5];
            let list = new Set(arr);
            console.log(list.size);//5

set集合中的元素不能重复的情况如下:

            let list = new Set();
            list.add(1);
            list.add(2);
            list.add(1);
            console.log(list);//Set(2) {1, 2} 不报错,相同的元素加不进去

set重要使用,去重

            let arr1 = [1,2,3,1,2];
            let list1 = new Set(arr1);
            console.log(list1);//Set(3) {1, 2, 3}

set是不会进行数据类型的隐形转换,如下事例中,字符串2就不等于数值2

            let arr2 = [1,2,3,1,'2'];
            let list2 = new Set(arr2);
            console.log(list2);//Set(4) {1, 2, 3, "2"}

set实例的方法:

  • add 添加
  • delete 删除
  • clear 清空
  • has 是否存在
            var arr = [1,2,3,4,5];
            let list = new Set(arr);
            console.log(list.has(2));//true
            console.log(list.delete(4),list);//true Set(4) {1, 2, 3, 5}
            list.clear();
            console.log(list);//Set(0) {}

Set实例的方法和遍历:

  • keys(),values(),entries()
  • forEach()
  • for of
            var arr = [1,2,3,4,5];
            let list = new Set(arr);
            for(let key of list.keys()){
                console.log(key);//1 2 3 4 5
            }
            for(let value of list.values()){
                console.log(value);//1 2 3 4 5
            }
            //数组的key和value是一样的。不加values()的情况下,默认values();
            for(let value of list){
                console.log(value);//1 2 3 4 5
            }
            for(let [key,value] of list.entries()){
                console.log(key, value);//1 2 3 4 5
            }
            list.forEach(function (item){
                console.log(item);//1 2 3 4 5
            });
WeakSet的用法

WeakSet和set的区别:

  • 1、WeakSet和set支持的数据类型不一样,WeakSet的元素只能是对象,而set可以是数值,布尔,字符串等。
  • 2、WeakSet是弱引用,通俗的讲,就是在WeakSet中添加的对象, 这个对象不是整个值拷过来,而是地址的引用,它不去检测这个地址是不是已经被垃圾回收机制回收了
  • 3、 WeakSet没有size属性,没有clear()方法。不能遍历
    WeakSet 不能遍历,是因为成员都是弱引用,随时可能消失,遍历不能保证成员的存在。可能刚刚遍历结束,成员就取不到了。
    WeakSet的一个用处是存储DOM节点,而不用担心这些节点从文档移除时,会引起内存的泄露。
            let weakList = new WeakSet();
            let obg = {};
            weakList.add(obg);
//            weakList.add(2);//这样添加就会报错,因为不是对象
            console.log('weakList', weakList);//weakList WeakSet {{…}}
Map的用法

Map是一个对象,类似Object,有key,value。不同的是Object中的key只能是字符串,而Map的key可以使任意数据类型。
Map和Set的用法十分相似,定义方法也有有两种:
第一种没有参数的:

            let map = new Map();
            let arr = [1,2,3];
            map.set(arr,456);
            console.log(map);//Map(1) {Array(3) => 456}
            console.log(map.get(arr));//456

第二种有参数的:new Map([[key,value],[key,value]])

           let map = new Map([['a',123],['b',456]]);
            console.log(map);//Map(2) {"a" => 123, "b" => 456}

这里需要注意:map添加元素使用的是.set(),获取时使用的是.get();
Map常用的属性值:size delete clear has

             let map = new Map([['a',123],['b',456]]);
             console.log(map);//Map(2) {"a" => 123, "b" => 456}
             console.log(map.has('a'));//true
             console.log(map.size);//2
             console.log(map.delete('a'),map);//true Map(1) {"b" => 456}
             map.clear();
             console.log(map);//Map(0) {}

Map常用的方法:keys(),values(),entries()
和for of和forEach()循环

            let a = [["one",1],["two",2]];
            let map = new Map(a);
            map.forEach(function(value, key, map){ //遍历map
                console.log(key + ":" + value); //one:1,two:2
            });
            for(var key of map.keys()){ //返回key的迭代器
                console.log(key); //one,two
            }
            for(var value of map.values()){ //返回值的迭代器
                console.log(value); //1,2
            }
            for(var [key,value] of map.entries()){ //返回项的迭代器
                console.log(value); //1,2
            }
WeakMap的用法

WeakMap与Map的区别:

  • 1、WeakMap接受的key值必须是对象
  • 2、没有size属性。不能使用clear方法
  • 3、不能遍历
    与WeakSet类似
            var weakMap = new WeakMap();
            let obj = {};
            weakMap.set(obj, 123);
            console.log(weakMap.get(obj));//123
内容概要:本文深入探讨了折扣店快消品定价的研究,涵盖快消品与折扣店行业的概述、定价影响因素、定价策略、定价方法、定价技巧及案例分析。快消品行业涉及日常生活用品、食品、饮料等,具有高频次和重复购买的特点。折扣店市场规模不断扩大,主要参与者包括赵一鸣、好特卖等。影响定价的因素包括成本(生产、库存、物流)、市场需求(规模、购买力、需求弹性)、竞争(对手定价策略、市场份额)、产品特性(差异化、品牌形象)、渠道与分销成本、政府政策等。定价策略分为成本导向(成本加成、目标收益)、需求导向(理解价值、需求差异)和竞争导向(随行就市、投标定价)。定价方法包括市场调研、成本加成、竞争比较和价值定价。定价技巧涵盖高价撇脂、渗透定价、价格歧视和捆绑定价。最后通过好特卖、嗨特购、零食很忙的案例分析,展示了不同折扣店的定价策略及其效果。 适合人群:从事快消品行业、折扣店运营的管理人员及对定价策略感兴趣的商业人士。 使用场景及目标:①帮助折扣店管理者了解定价的基本理论和实际操作方法;②为快消品企业提供定价决策支持,优化定价策略;③通过案例分析,提供实际操作中的经验和教训。 其他说明:折扣店在制定快消品定价时,应综合考虑多种因素,灵活运用不同的定价策略和技巧,以应对市场变化,提升竞争力。建议企业定期监控市场动态,分析消费者反馈,不断优化定价方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值