//推断是不是是数组
let isArr = (arr) => (arr instanceof Array)
//推断是不是一维数组
let isTdim = (arr) => arr.reduce((o1, o2) => o1&&!isArr(o2), true)
//多维数组变一维数组
let flat = (arr) => isTdim(arr) ? arr : flat(Array.prototype.concat.apply([],arr))
这里apply
函数接收的arr
数组个数假如太甚会涌现题目。在node上测试,120000之内都可以,大于130000,就报错了。chrome上会高一点。
关于闭包
function name() {
var a = []
for (var i = 0; i < 11; i++) {
a[i] = function(){return i}
}
return a
}
console.log(name()[0]())
上面这个函数会输出不测的效果:11.这里不再辛苦地诠释为何会涌现这类反人道的效果。只是给出准确而不拗口的写法,只要把var
变成let
就能够了
function name() {
var a = []
for (let i = 0; i < 11; i++) {
a[i] = function(){return i}
}
return a
}
console.log(name()[0]())
假如你忧郁浏览器不支持let
,那就用babel转一下,babel会把let转换成var而不涌现作用域提拔的题目。