一、Map
const newMap = new Map()
newMap.set(1, 'one')
newMap.get(1)//one
增删改查的方法
size:返回Map对象中所包含的键值对个数
set(key, val):向Map中添加新元素
get(key):通过键值查找特定的值
has(key):判断Map对象中是否有key,若有返回true,否则返回false
delete (key):通过键值从Map中移除对应的数据
clear():将这个Map中的所有元素删除
遍历的方法
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
遍历方法的使用
const newMap = new Map()
newMap.set(1, 'one')
newMap.set(2, 'two')
newMap.set(3, 'three')
for (const item of newMap.keys()) {
//1 2 3
console.log(item)
}
for (const item of newMap.values()) {
// 'one' 'two' 'three'
console.log(item)
}
for (const item of newMap.entries()) {
// [1,'one'] [2,'two'] [3,'three']
console.log(item)
}
newMap.forEach(function (value, key) {
//1,'one' 2,'two' 3,'three'
console.log(key,value);
})
二、Set
const newSet = new Set()
增删改查的方法
size:返回Set实例的成员总数
add(val):添加某个值,返回Set结构本身(可以链式调用)
delete(val):删除某个值,删除成功返回true,否则返回false
has(val):返回一个布尔值,表示改制是否为Set的成员
clear():清除所有成员,没有返回值
不能添加重复的值
const newSet = new Set()
newSet.add(1)
newSet.add(2)
newSet.add(3)
newSet.add(3) //重复的值,添加失败
console.log(newSet) //{1,2,3}
遍历的方法
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
遍历方法的使用
const newSet = new Set([1,2,3])
for (const item of newSet.keys()) {
//1 2 3
console.log(item)
}
for (const item of newSet.values()) {
//1 2 3
console.log(item)
}
for (const item of newSet.entries()) {
//[1, 1] [2, 2] [3, 3]
console.log(item)
}
newSet.forEach(function (value) {
//1 2 3
console.log(value);
});
Map的应用场景
两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍
示例:
给定nums=[2,7,11,15],target = 9
因为nums[0]+nums[1] = 2+7=9
所以返回[0,1]
let nums = [2, 7, 11, 15]
let target = 9
方法一:双重for循环
function numSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j]
}
}
}
}
console.log(numSum(nums, target))//[0,1]
方法二:Map的妙用
function numSum(nums, target) {
let newMap = new Map()
for (let i = 0; i < nums.length; i++) {
let result = target - nums[i]
if (newMap.has(result)) {//判断Map中是否存在该值若存在则返回该值和当前下标,否则将结果和下标作为键值对添加到Map中
return [newMap.get(result), i]
}
newMap.set(nums[i], i)
}
}
console.log(numSum(nums, target))//[0,1]
Set的应用场景
求两个数组的并集
const a = [1,2,3]
const b = [2,3,4]
const newSet = new Set([...a,...b])
console.log(newSet)//{1, 2, 3, 4}
数组去重
const arr = [1,2,3,4,5,1,2,3,4,2,2,3,4]
console.log([...new Set(arr)]) //[1, 2, 3, 4, 5]
综上
Map与Set的共同点
1.所有元素自动排序
2.set以RBTree作为底层容器
Map与Set区别
1.Map类似于Object是键值对形式存在的,任意值都可成为他的键值
2.Set类似于数组只存在值,并且值是不重复的
3.Map的键是不能修改的,但是键对应的值是可以修改的,但是Set的值是不可修改的
欢迎各位看官老爷点赞,评论!