多维数组转一维数组的几种方法
一: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)