高阶函数
-
高阶函数是对其他函数进行操作的函数,可以将它们作为参数或返回它们
-
简单来说,高阶函数是一个函数,它接收函数作为参数或将函数作为输出返回
高阶函数的意义
- 参数为函数的高阶函数
// 参数为函数的高阶函数
function foo(fn) {
// 判断实参是否为函数
if ((typeof fn) === 'function') {
fn();
}
}
- 返回值为函数的高阶函数
// 返回值为函数的高阶函数
function foo () {
return function() {
}
}
// 调用
let f = foo();
- 高阶函数的实际作用
// 回调函数
let callback = (value) => {
console.log(value);
}
let foo = (value,fn) => {
if(typeof fn === 'function') {
fn(value);
}
}
foo('hello',callback);
Map对象
-
Map是一组键值对的数据结构,具有极快的查找速度
-
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]
- 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 } 的数据结构
- Map对象多次设置同一个key,会覆盖掉之前的value
let myMap = new Map();
myMap.set('张三', 1996);
myMap.set('张三', 1997);
m.get('张三'); // 1997
- 遍历方法:
- 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对象
-
Set是一组key的集合,并不储存value,并且key不能重复
-
创建Set对象,可以将数组作为输入,或空Set
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
- 重复的元素会被过滤掉
var s2 = new Set([1, 2, 2, 3]); // 含1, 2, 3
- 通过add(key)方法可以添加元素到Set中
s2.add(5) // Set {1, 2, 3, 5}
- 通过delete(key)方法可以删除元素
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
s2.delete(3) // Set {1, 2}