有意思的面试小试题

多维数组转一维数组的几种方法

一:reduce
var arr1 = [1, 2, [3, 4], 56];
    var res1 = arr1.reduce((total, item) => {
        return total.concat(item)
    }, [])
console.log(res1, 'res1')//[1, 2, 3, 4, 56] "res1"

注意:reduce定义和用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

可以用于数组求和

[1, 2, 3, 4].reduce((total, item) => {
return total + item
})
返回元素相加的结果:10
 
二:递归
var arr2=[1,2,3,[4,5,[9]],[1,2],8]
var res= [];
    function fun(arr2) {

        for (var i = 0; i < arr2.length; i++) {
            if (arr2[i] instanceof Array) {//Array.isArray()或者typeof()=="object";
                fun(arr2[i]);
            } else {
                res.push(arr2[i])
            }
        }
        return res
    }
    console.log(fun(arr2))//[1, 2, 3, 4, 5, 9, 1, 2, 8]

三:toString()和split()

let result=arr3.toString().split(",")//
或者 arr3.join(',').split(',');//

这里数组的元素都是字符串类型,所以需要转成Number;

result.map(function(x){ return Number(x); }

 节流或防抖函数

参见:https://www.cnblogs.com/walls/p/6399837.html(挺详细的)

函数作用域的计算题

function func(n, k) {
        document.write(n + ',' + k + "<br/>");
        return {
            func: function(m) {
                return func(m, n)
            }
        }
    }
// var a = func(10);
    // a.func(20);
    // a.func(30);
    // a.func(40) //underfined;10,10,10

    //var b = func(50).func(60).func(70).func(80) //underfined,50,60,70

    var c = func(100).func(200); //underfined,100,200,200
    c.func(300);
    c.func(400)
原文地址:https://www.cnblogs.com/liliy-w/p/10389607.html