学习前端面试知识(2)

 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);
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值