前端面试题手敲代码(部分)

94 阅读1分钟

1.扁平数据化的解决方法

第一种方法

 const a = [1, [2, [3, [4, 5]]]];
        const flatten = (arr) => {
            let result = [];
            for (let i = 0; i < arr.length; i++) {
                if (Array.isArray(arr[i])) {
                    result = result.concat(flatten(arr[i]));
                } else {
                    result.push(arr[i]);
                }
            }
            return result;
        };
    console.log(flatten(a));//[1, 2, 3, 4, 5]

第二种方法(比较简单,利用的是flat)

const a = [1, [2, [3, [4, 5]]]];
const b = [6, 7, 8, 9, 10]
console.log(...(a.flat(Infinity)), ...b)//1, 2, 3, 4, 5, 6, 7, 8, 9, 10

2.防抖节流手敲代码

//防抖
let buttonBox = document.querySelector('.btn')
buttonBox.addEventListener('click', fangdou())
  function fangdou() {
            var timer
            return function() {
                clearTimeout(timer)
                timer = setTimeout(() => {
                    console.log('防抖成功!')
                }, 1000);
            }
        }
        
//节流
let buttonBox = document.querySelector('.btn')
buttonBox.addEventListener('click', jieliu())
  function jieliu() {
            let timer = null
            return function() {
                if (!timer) {
                    timer = setTimeout(() => {
                        console.log('节流成功!')
                        timer = null
                    }, 2000);
                }
            }
        }

3.数组去重(三种)

let arr1 = ['abc', 'abcd', 'sss', '2', 'd', 't', '2', 'ss', 'f', '22', 'd', 'd', 'd', 'd'];
//第一种
    let arr1 = []
        for (let i = 0; i < arr.length; i++) {
            if (arr1.indexOf(arr[i]) === -1) {
                arr1.push(arr[i])
            }
        }
   console.log(arr1)//['abc', 'abcd', 'sss', '2', 'd', 't', 'ss', 'f', '22']
//第二种  
   let arr2 = arr.sort((a, b) => {
            return a - b
        })
        for (let i = 0; i < arr2.length; i++) {
            if (arr2[i] === arr2[i + 1]) {
                arr2.splice(i, 1)
                i--
            }
        }
    console.log(arr2)//['abc', 'abcd', 'sss', '2', 'd', 't', 'ss', 'f', '22']
//第三种
    let arr3 = [...new Set(arr)]
    console.log(arr3)//['abc', 'abcd', 'sss', '2', 'd', 't', 'ss', 'f', '22']

4.每个数组出现的次数

        let arr = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6]
        function fun(arr) {
            let obj = {}
            arr.forEach(element => {
                if (obj[element]) {
                    obj[element]++
                } else {
                    obj[element] = 1
                }
            });
            return obj
        }
        console.log(fun(arr))//{1: 4, 2: 4, 3: 4, 4: 4, 5: 4, 6: 3}

5.冒泡排序

let arr = [3, 2, 4, 1, 5, 9, 7, 8, 6]
        for (let j = 0; j < arr.length - 1; j++) {
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] > arr[i + 1]) {
                    let temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
        }
    console.log(arr)//[1, 2, 3, 4, 5, 6, 7, 8, 9]

6.千分位 toLocaleString()

let arr4 = 1300000000000000000
   console.log(arr4.toLocaleString())//1,300,000,000,000,000,000