
Author:Gorit
Date:2021年12月9日
一、数组篇
目标:讲解一下开发中不常见,但是很好用的 API
1.1 展开表达式
展开数组的每一项,返回一个新数组
let arr = [1,2,3];
console.log(arr); // [1, 2 ,3]
// 用来数组拷贝
let res = [arr];
res.push(4);
res // [1,2,3,4]
arr // [1,2,3
1.2 返回一个新数组
除了数值的 for 循环,forEach 循环,还有哪些好用的循环处理方案
1.2.1 map
使用 map,对每一项元素进行特定操作,然后返回操作后的新数组eg:
let arr = [1, 2, 3];
let res = arr.map(item => item + 1);
res // [2,3,4
1.2.2 filter
根据条件筛选出符合条件的元素,并返回一个新数组eg:
let arr [1,2,3,4,5,6];
// 获取数组中的偶数
let res = arr.filter(item => item % 2 === 0);
res // [2,4,6]
1.2.3 concat
合并两个或者多个数组, 不改变原数组
concat()
concat(value0)
concat(value0, value1)
concat(value0, value1, , valueN
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"
实际应用
本地定义一个数,再从其他的地方加载一个数据,两个数据处理后,合并
1.3 索引相关问题
- indexOf() || lastIndexOf() (不存在,返回 -1)
- find() // 查找具体的元素,并且返回第一个符合条件的元素, 没找到返回 undefined
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
- findIndex() // 查找第一个符合条件的元素的下标,没找到返回 -1
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// expected output: 3
- at() // Node.js 不支持
let arr = [1,2,3];
// 获取最后一个元素
arr.at(-1) 等价于 arr[arr.length - 1];
1.4 返回 boolean 值
- every() // 测试所有元素是否符合条件
let arr = [1,2,3,4,5];
let isLargerThan = (num) => num > 0;
function testEachElement (arr) {
return arr.every(isLargerThan);
}
console.log(testEachElement(arr)); // 所有元素都大于 0,所以为true
- some() // 测试,只要有元素通过即可
let arr = [1,2,3,4,5];
let isLargerThan1 = (num) => num > 4;
function testSomeElement (arr) {
return arr.some(isLargerThan1);
}
console.log(testSomeElement(arr)); // 有一个元素大于 4,所以为 true
- includes[] // 条件筛选,一般用于 消除多重 if 操作
includes 的值是否都包含于 数组 arr 中
let arr = [1,2,3];
// 加载网络数据,将拿到的列表数据比对是否存在与预先定义好的数组
const {data : res} = await getData("/xxx/xxx");
{
"code": 200,
"msg": "SUCCESS",
"data": {
xx: xx,
list: [2,3]
}
}
// 循环判断返回的设置是否和前端定义的相等
if (res.data.list[0] = arr[1] || res.data.list[1]) {
// 执行你的业务逻辑...
}
1.5 返回一个最终结果
reduce
这个内置的函数比较特殊,他是通过回调处理每一个值,每次处理都会保存上次处理的结果,继续与下一个元素继续处理
实现对一个数字的连续操作实现一个累加器
let res = 0;
for (const item of [1,2,3,4,5]) {
res+=item;
}
console.log(res)
使用 reduce 实现相同的功能
let arr = [1,2,3,4,5];
// 实现一个累加器
const reducer = (preVal, curVal) => preVal + curVal;
console.log(arr.reduce(reducer));
/**
* preVal + curVal (curVal) 是从数组下标开始的 (preVal) 是从上一次处理的结果开始的
第一次执行,由于没有赋初始值,所以就 preVal 从 0 开始
0 + 1 => 1
第二次,继续使用第一次的结果
1 + 2 = 3
3 + 3 = 6;
6 + 4 = 10;
10 + 5 = 15;
<strong>/
console.log(arr.reduce(reducer, 6));
/</strong>
* 有初始值了
* 6 + 1 = 7
* 7 + 2 = 9
* 9 + 3 = 12
* 12 + 4 = 16
* 16 + 5 = 21
**
1.6 参考资料
1.7 原文链接
《Gorit 带你学全栈 — JavaScript 高级应用(第一弹)》
二、彩蛋
粉丝福利:限时!!!
- 不定期分享一些知识技能
- 前沿技术分享
- 个人学习总结

















