2024-7-28 打卡第二天 学习视频链接
使用两种方法实现flatten函数
- flatten函数主要用于将多维数组或嵌套列表展开成一维数组或列表
- 创建一个空数组
[]
。使用.concat()
方法来“合并”这个空数组和arr
数组(实际上是将arr
数组的元素作为独立的参数传递给.concat()
方法)。因为.concat()
方法返回一个新数组,所以[].concat(...arr);
的结果就是一个包含了arr
数组中所有元素的新数组 - 通过两次输出推测结果,首先用了arr.some()结合isArray循环遍历数组中是否还存有为数组的元素,只要有就会进入循环,使用...arr解构将第一个数组里的元素解析出来了,这时候的1 2 3 [4, 5, Array(2), 8] 9其实可以理解为两个数组,一个是[1,2,3,9]一个是[4,5,Array(2), 8],再使用concat将这两个数组合并起来并返回一个新的数组,然后通过赋值给arr实现替换,迭代下来便实现了扁平化的操作。
var arr = [1,2,3,[4,5,[6,7],8],9];
const flatten = function(arr){
while(arr.some(v => Array.isArray(v))){
console.log(...arr);
arr = [].concat(...arr);
console.log(arr);
}
}
// 分别记录 ...arr和arr的两个输出
第一次: ...arr : 1 2 3 [4, 5, Array(2), 8] 9
arr : [1, 2, 3, 4, 5, Array(2), 8, 9]
第二次: ..arr : 1 2 3 4 5 [6, 7] 8 9
arr : [1, 2, 3, 4, 5, 6, 7, 8, 9]
flatten(arr);
- ll使用递归的方式进行操作,基本还是和上面的一样,也是循环,然后判断是不是数组,是的话就递归调用这个方法,直到返回的全部不是数组而是基础的元素
- 注意还是需要...对数据进行解构,如果不使用扩展运算符,
concat
方法将只会接收到一个参数,即map
方法返回的整个数组,最后的结果还是和没有处理前的一样,可以理解为...展开了数组才让数组之间的合并有意义,不展开的话一直是最开始的数组和空数组进行合并,是没有意义的
var arr = [1,2,3,[4,5,[6,7],8],9];
const flatten = function(arr){
return [].concat(...arr.map(v => Array.isArray(v) ? flatten(v) : v));
}
console.log(flatten(arr));
两数之和
- arr.indexOf默认从索引0开始寻找,基本逻辑就是遍历数组,获得数组当前下标的元素,通过arr.indexOf判断数组内是否含有target - num 的目标值,没有的话会返回-1,有的话就是大于-1,同时排除了是它本身的可能性,就可以直接返回结果。
var arr = [2,7,11,15];
function sum(arr,target){
for(var i = 0; i < arr.length; i++){
var num = arr[i];
const index = arr.indexOf(target - num);
if(index > -1 && index != i){
return [arr[i],arr[index]];
}
}
}
console.log(sum(arr,9));
a b c三个请求,希望c在a,b获取后再请求
- 两个思路,一个是Promise.all(),还有一个就是下面的用数组记录
const fs = require('fs')
let arr = [];
function fn(data){
arr.push(data);
if(arr.length === 2){
console.log(arr)
}
}
fs.readFile('./a.text','utf-8',(err,data) => {
fn(data);
})
fs.readFile('./b.text','utf-8',(err,data) => {
fn(data);
})