JS中Map()与Set()的特点详解

149 阅读3分钟

在随机一个算法题的时候随机到了一个简单题

image.png 这种题有很多解法,一眼如果用多分枝肯定就没意思了。 这里我就想到了C++里面的#define 的用法,如果可以做到这样,那么这道题的数字转换就只剩下了后面半部分的特殊情况了。

这里我想到了两种方法:1.对象 Obj中的键值对 2.Map()方法绑定键值对

这里我们先看第一种方法

1.使用对象绑定键值对

  const list={I:1,V:5,X:10,L:50,C:100,D:500,M:1000}
  //在将字符串遍历
   let ans = 0;
   const n = s.length;
   for (let i = 0; i < n; ++i) {
   //只能使用list[s[i]]的方式查找键值
   //不能使用list.s[i],这样是不会对s[i]解码查找,而是
      const value = list[s[i]];
       if (i < n - 1 && value < list[s[i + 1]]) {
        ans -= value;
       } else {
         ans += value;
       }
    }
    return ans;
  };

2.使用Map()方法绑定键值对

 const list = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);  
//在将字符串遍历
   let ans = 0;
   const n = s.length;
   for (let i = 0; i < n; ++i) {
   //使用list[s[i]]也是可以的
      const value = list.get(s[i]];
       if (i < n - 1 && value < list[s[i + 1]]) {
        ans -= value;
       } else {
         ans += value;
       }
    }
    return ans;
  };

想到这里我就想Map()的特点,和一个与map()及其相似的类set()

Map()

创建一个Map()对象

image.png

Map()方法 添加

image.png

Map()方法 取值

image.png

Map()的一些函数

image.png

重点函数

image.png

      const mapp=new Map()
      mapp.set(1,'one')
      mapp.set(2,'two')
      mapp.set(3,'three')
      mapp.set(4,'four')
      //调用函数
      console.log(mapp.keys())
      console.log(mapp.values())
      console.log(mapp.entries())
      mapp.forEach(item=>console.log(item))

返回的结果

image.png

Map()方法在内存中的存储

image.png

Set()

创建一个Map()对象

image.png

Set()方法 添加使用add()方法

image.png

Map()方法 取值

由于Set对象是一个值的集合,其中每个值都是唯一的。要获取Set对象中的某个值,你可以使用迭代器。以下是获取Set中某个值的方法:

  1. 使用for...of循环来迭代Set对象。

  2. 使用Array.from()Set转换为数组,然后通过索引访问特定的值。

    let mySet = new Set([1, 2, 3]);
    
    for (let value of mySet) {
    console.log(value);
    }
       //或者
       
    // 通过Array.from()转换为数组并获取特定索引的值
    let array = Array.from(mySet);
    console.log(array[0]); // 获取第一个值
    //或者使用`find()`方法或者`indexOf()`方法来查找特定的值。
    

一般我们需要查找set中是否存在某个值时候,直接使用Set().has()查找即可

Set()的一些函数

image.png

Map()方法在内存中的存储

image.png Set本身是不允许有重复的值,当遇到重复的值添加进来的时候,Set()将会用B方案存储,不会将新值替换旧值。

image.png

虽然set.add不允许添加相同的值,但是

set.add({name:’Ecri’})
set.add({name:’Ecri’})

image.png

却是可以的,没有找到明确的原因,个人猜测可能跟原型相关。有知道了大佬可以评论区分享一下。

然后Set()也有几个与Map()一样的函数

image.png 这里的keys的键名就是键值

image.png 返回的结果 image.png