Map对象和Set对象

高阶函数

  1. 高阶函数是对其他函数进行操作的函数,可以将它们作为参数或返回它们

  2. 简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回

高阶函数的意义

  1. 参数为函数的高阶函数
// 参数为函数的高阶函数
function foo(fn) {
    // 判断实参是否为函数
    if ((typeof fn) === 'function') {
        fn();
    }
}
  1. 返回值为函数的高阶函数
// 返回值为函数的高阶函数
function foo () {
    return function() {
        
    }
}
// 调用
let f = foo();
  1. 高阶函数的实际作用
// 回调函数
let callback = (value) => {
    console.log(value);
}

let foo = (value,fn) => {
    if(typeof fn === 'function') {
        fn(value);
    }
}

foo('hello',callback);

Map对象

  1. Map是一组键值对的数据结构,具有极快的查找速度

  2. Map需要一个二维数组,或空的Map对象

var m = new Map([['张三', 1996], ['李四', 1997], ['王五', 1993]]);
m.get('张三'); // 1996
实际应用 - 计算两数之和

// 计算数组nums中和为target的两个数,并返回对应下标
function twoSum(nums, target) {
  let map = new Map();
  for (let i = 0; i < nums.length; i++) {
    const devideNum = target - nums[i];
    if (map.has(devideNum)) {
      return [map.get(devideNum), i];
    } else {
      map.set(nums[i], i);
    }
  }
  return [];
}

console.log(twoSum([2, 7, 11, 15], 9)); // [0,1]
  1. Map对象的函数
    • set(key, val): 添加新元素
    • get(key): 返回对应的val
    • has(key): 存在返回true, 不存在返回false
    • delete(key): 移除key对应的数据
    • clear(): 清空所有的数据
var m = new Map(); // 空Map
m.set('张三', 1996); // 添加新的key-value
m.set('李四', 1997);
m.has('张三'); // 是否存在key 'Adam': true
m.get('张三'); // 1996
m.delete('张三'); // 删除key '张三'
m.get('张三'); // undefined

// m 为 {"张三" => 1996, "李四" => 1997 } 的数据结构
  1. Map对象多次设置同一个key,会覆盖掉之前的value
let myMap = new Map();
myMap.set('张三', 1996);
myMap.set('张三', 1997);
m.get('张三'); // 1997
  1. 遍历方法:
    • keys(): 包含的所有键名以数组形式返回
    • values(): 包含的所有数值以数组形式返回
    • forEach():遍历所有成员
let myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");

for (let [key, value] of myMap) {
  console.log(key + " = " + value);
  // "0 = zero" 和 "1 = one"
}

for (let key of myMap.keys()) {
  console.log(key); // "0" 和 "1"
}

for (let value of myMap.values()) {
  console.log(value); // "zero" 和 "one"
}

myMap.forEach(function(value, key) {
  console.log(key + " = " + value);
  // "0 = zero" 和 "1 = one"
})

Set对象

  1. Set是一组key的集合,并不储存value,并且key不能重复

  2. 创建Set对象,可以将数组作为输入,或空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
  1. 重复的元素会被过滤掉
var s2 = new Set([1, 2, 2, 3]); // 含1, 2, 3
  1. 通过add(key)方法可以添加元素到Set中
s2.add(5) // Set {1, 2, 3, 5}
  1. 通过delete(key)方法可以删除元素
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
s2.delete(3) // Set {1, 2}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值