博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔记--数组扁平化
阅读量:4162 次
发布时间:2019-05-26

本文共 1373 字,大约阅读时间需要 4 分钟。

多级数组扁平化处理

扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组(不改变原数组,所以不能用push添加到现有阵列)

以下函数都是建立在arr是数组的前提下,函数仅供参考,没有做过多判断传参

ES6 扩展运算符 …

var arr = [1, [2, [3, 4]]];function flatten(arr) {    while (arr.some(item => Array.isArray(item))) {        arr = [].concat(...arr);    }    return arr;}console.log(flatten(arr))

ES5

高级写法:

var arr = [1, [2, [3, 4]]];flatten1 = Function.apply.bind([].concat, []);  //重要步骤function flatten(arr) {    while (arr.some(item => Array.isArray(item))) {        arr = flatten1(arr);    }    return arr;}console.log(flatten(arr))

常规写法

var arr = [1, [2, [3, 4]]];function flatten(arr) {    return arr.reduce(function(prev, next){        return prev.concat(Array.isArray(next) ? flatten(next) : next)    }, [])}console.log(flatten(arr))

递归

var arr = [1, [2, [3, 4]]];function flatten(arr) {    var result = [];    for (var i = 0, len = arr.length; i < len; i++) {        if (Array.isArray(arr[i])) {            result = result.concat(flatten(arr[i]))        }        else {            result.push(arr[i])        }    }    return result;}console.log(flatten(arr))

高级写法分析

Function.apply.bind([].concat, [])// 相当于function(arg) {  return Function.apply.call([].concat, [], arg)}// 相当于function(arg) {  return [].concat.apply([], arg)}到这里应该明白怎么回事了,不清楚可以去看先Function.prototype.apply()// 相当于function(arg) {   return [].concat(...arg)}

参考链接:

MDN:

JavaScript专题之数组扁平化:

转载地址:http://yxvxi.baihongyu.com/

你可能感兴趣的文章
Debug与Release版本的区别
查看>>
VS2008 Unicode和多字节编码区别
查看>>
SHELLEXECUTEINFO 和 ShellExecuteEx的使用
查看>>
unsigned char和signed char型变量的区别,赋值后它在内存中的存储形式
查看>>
在VC中调用WebService
查看>>
VC++调用webservice (不使用.NET的托管技术)
查看>>
VS2008非托管c++访问webservice服务
查看>>
C++extern用法
查看>>
vc++生成程序不需要.net运行环境的可以执行exe程序的方法
查看>>
fstream默认不支持中文路径和输出整数带逗号的解决办法
查看>>
各种程序打包软件的安装命令
查看>>
Wise Installation使用中注意的问题
查看>>
WinCE开发环境的搭建
查看>>
让fstream支持中文路径
查看>>
Wise Installation使用中注意问题 总结
查看>>
wince 禁止程序标题栏上的退出按钮X
查看>>
WINCE 禁止MFC程序窗口上的OK按钮
查看>>
线程池原理及创建(C++实现)
查看>>
什么代码才是线程安全的
查看>>
基于WinCE 5.0环境项目开发心得总结
查看>>