Set 的应用

Set 的应用

是相对于arr 的进阶,arr 是以为索引按索引排序。插入的话会导致原有数据重新排列。

Set 是以键为索引,取值和插拔速度是非常快的。

Array: 数组用来搜索元素的方法时间复杂度为0(N)。换句话说,运行时间的增长速度与数据大小的增长速度相同。

Set用于搜索、删除和插入元素的方法的时间复杂度都只有O(1),这意味着数据的大小实际上与这些方法的运行时间无关。

weakSet  即 值 只能为对象。

WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中

 WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。

 

// 举一个goole 的面试题

Eg : 已知数组 arr [1,3,4,5,6] 和常量sum = 9,判断数组内的数组内是否存在2数字之和等于sum, 存在返回true 不存在返回false

 

const arr = [1, 2, 3, 4, 5, 6];

        const sum = 9;

        const findSum = (arr, val) => {

            let searchValues = new Set();

            searchValues.add(val - arr[0]);

            for (let i = 1, length = arr.length; i < length; i++) {

                let searchVal = val - arr[i];

                if (searchValues.has(arr[i])) {

                    return true;

                } else {

                    searchValues.add(searchVal);

                }

            };

            return false;

        };

 

        const findSum2 = (arr, sum) =>

            arr.some((set => n => {

                console.log(set)

                return set.has(n) || !set.add(sum - n)

            })(new Set));

        // findSum3 是对 find some2 的解释

        // const findSum3 = (arr, sum) => {

        //     return arr.some((function (set) {

        //         return (n, ind, array) => {

        //             return set.has(n) || !set.add(sum - n)

        //         }

        //     })(new Set))

        // }

 

        // 方法3 其实 箭头函数也不是特别好,还是 function 的定义函数好点。

        // 如果使用箭头函数,this 是没有的!!注意是没有的!!所以 some 的第三个参数失效!

        const calc = (arr,sum)=>{

            return arr.some(function(n,ind,array){

                return this.has(n) || !this.add(sum - n)

            },new Set)

        }

        calc(arr, sum)

        console.log('--calc', calc(arr, sum))

 

Map 的前世今生

 对obj 的进阶。Obj  的key 只能为字符串。不能为对象

 WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值