资讯专栏INFORMATION COLUMN

多维数组变一维数组

darkbaby123 / 1543人阅读

摘要:判断是否是数组判断是否一维数组多维数组变一维数组这里函数接受的数组个数如果太过会出现问题。只是给出正确而不拗口的写法,只要把变成就可以了如果你担心浏览器不支持那就用转一下,会把转换成而不出现作用域提升的问题。

//判断是否是数组
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而不出现作用域提升的问题。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84143.html

相关文章

  • PHP 多维数组转换一维数组

    摘要:下面是我写的将多维数组转换为一维数组的类方法,转换的一维数组的每个元素包含了相应的值在原有多维数组中的以及维度即深度如果对应的原有元素也是数组,则相应的一维元素的则表示为当然,这个可以改。在格式化输出多维数组的时候比较有效。 下面是我写的将多维数组转换为一维数组的类方法,转换的一维数组的每个元素包含了相应的值在原有多维数组中的key,value以及维度(即深度),如果对应的原有元素也是...

    lykops 评论0 收藏0
  • 数组扁平化(将多维数组降维成一维数组

    摘要:将这个问题进行转化将维数组降到维思路构造一个目标数组,初始为空。如果当前项是数组,对当前数组元素进行降维。这是一个典型的递归过程。 将这个问题进行转化 ===> 将N维数组降到(N-1)维 思路:构造一个目标数组,初始为空。遍历N维数组中的每一项。如果当前项不是数组而是单个元素,那么将它保存到目标数组中。如果当前项是数组,对当前数组元素进行降维。这是一个典型的递归过程。 functio...

    Ethan815 评论0 收藏0
  • 《C陷阱与缺陷》第三章

    摘要:而对于二维数组,因为内存连续性的原因,内存并不会真真的开辟一个二维空间,而是连续依次存入二维数组的每个数据。之所以有二维数组的说法是为了分析问题方便。二维数组的实质是一维数组,只是其元素类型是一维数组类型。 ...

    tyheist 评论0 收藏0
  • PHP cURL请求中CURLOPT_POSTFIELDS只支持一维数组

    摘要:使用发起请求时,我们会常用方法,具体的请求方式可以参考请求详解这篇文章。但我推荐,为了请求的规范化,应该全部使用对请求的参数进行编码。 使用PHP发起请求时,我们会常用cURL方法,具体的PHP请求方式可以参考 PHP cURL请求详解 这篇文章。 cURL发起POST请求 在使用中,如果你需要发送POST的请求,需要配置CURLOPT_POST和CURLOPT_POSTFIELDS...

    airborne007 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<