js中数组扁平化处理

经典面试题,项目中可以用到js数组操作的地方很多,js数组扁平化是其中一种

什么是数组扁平化?

数组扁平化就是将一个多维数组转换为一个一维数组

实现的基本方式

1、对数组的每一项进行遍历。

2、判断该项是否是数组。

3、如果该项不是数组则将其直接放进新数组。

4、是数组则回到1,继续迭代。

5、当数组遍历完成,返回这个新数组。

实现数组扁平化代码

1.常规方式 递归处理

Array.prototype.flatten = function () {

var resultArr = [];

var len = this.length;

for (var i = 0; i < len; i ++) {

if (Array.isArray(this[i])) {

resultArr = resultArr.concat(this[i].flatten());

} else {

resultArr.push(this[i]);

}

}

return resultArr;

}

var arr=[1,2,3,[4,5,'hello',['world',9,666]]]

console.log(arr.flatten())//[1, 2, 3, 4, 5, "hello", "world", 9, 666]

2.使用reduce方法

Array.prototype.flatten = function () {

return this.reduce(function (prev, cur, curIndex, arr) {

return Array.isArray(cur) ? prev.concat(cur.flatten()) : prev.concat(cur);

}, []);

}

3. yield*的用法,天才级别的扁平化方式

function* iterTree(tree){

if(Array.isArray(tree)){

for(let i = 0 ;i

yield* iterTree(tree[i]);

}

}else{

yield tree;

}

}

let arr1 = [1, 2, ['a', 'b', ['中', '文', [1, 2, 3, [11, 21, 31]]]], 3];

let list=[]

for (const x of iterTree(arr1)) {

list.push(x)

}

console.log(list);//[1, 2, "a", "b", "中", "文", 1, 2, 3, 11, 21, 31, 3]

4. es6中的flat函数也可以实现数组的扁平化

let arr1 = [1,2,['a','b',['中','文',[1,2,3,[11,21,31]]]],3];

console.log( arr1.flat( Infinity ) );

5.扩展运算符

//ES6 增加了扩展运算符,用于取出参数对象的所有可遍历属性,拷贝到当前对象之中:

var arr = [1, [2, [3, 4]]];

console.log([].concat(...arr)); // [1, 2, [3, 4]]

//我们用这种方法只可以扁平一层,但是顺着这个方法一直思考,我们可以写出这样的方法:

// 改进

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))

js的tree数组对象扁平化思否_js中数组扁平化处理相关推荐

  1. js的tree数组对象扁平化思否_js 中的tree型数组如何去重与合并?

    假设数据是这样的,不难发现,其中父级roleCode有重复的,子级roleCode也有重复的,如何做到把重复的去掉,同时,又可以把不重复的合并到一起呢? testTreeData: [ { roleC ...

  2. js的tree数组对象扁平化思否_JS专题之数组展开

    前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...

  3. JS - 将tree(树形)数据结构格式改为一维数组对象格式(扁平化)

    需求:将JSON①数据格式输出为JSON②格式. JSON①: [{sortName:'小明',sortCode: 'xm',children:[]},{sortName:'小刚',sortCode: ...

  4. php中json字符串转json对象数组对象,php – 将JSON字符串解析为数组,而不是对象

    您正在尝试将对象视为数组,而对象不是数组,它是一个对象. 每次在JSON中看到{}时,这意味着"这些神圣括号中包含的内容是动态对象".当你看到[]时,这意味着"看哪!我是 ...

  5. js删除数组中指定元素_js中数组操作详解

    今天给大家带来一篇有关数组操作方法的文章. 新建数组 方法一:通过new运算符创建一个数组构造函数. var arr = new Array(); 方法二:通过方括号直接创建直接量数组. var ar ...

  6. java中字符串和数组如何比较_[Java教程]javascript中数组和字符串的方法比较

    [Java教程]javascript中数组和字符串的方法比较 0 2016-07-19 23:00:05 ×目录[1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的 ...

  7. javascript --- 函数的柯里化 Vue 2.x中柯里化的使用

    函数式编程部分重点 参考资料: 函数式编程 柯里化 只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数 var add = function (x) {return function(y ...

  8. go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕

    概述 与其他编程语言类似,Go语言也有数组array.Go语言中,数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西,它就像是对数组的引用.在本文中,我们将只研究数组. 定义 ...

  9. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  10. mybatis-plus存数组对象,并从数据库查出这个数组

    数组实体类 数据库表实体类 注意:一定要加@TableField(typeHandler = MyJacksonTypeHandler.class)这个注解. MyJacksonTypeHandler ...

最新文章

  1. cap = cv2.VideoCapture(0).read()摄像头读取图片用法
  2. 重构碎片化知识_知识碎片化时代,如何妙用思维导图,提高你的学习效率(含福利)...
  3. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
  4. jstat分析_jstat –分析
  5. 模板 字段_劲爆新功能:轻流文字识别(OCR)功能支持自定义识别模板啦
  6. [翻译] 学习iOS开发的建议:如何从菜鸟到专家
  7. 使用Lucene索引和检索POI数据
  8. cli vue webpack 实战_Vuejs技术栈从CLI到打包上线实战全解析
  9. Spring学习笔记之二----基于XML的Spring AOP配置
  10. Android自定义样式
  11. GraphX中Pregel单源点最短路径(转)
  12. mybaties中的selectKey和useGeneratedKeys=true
  13. 使用Go实现Socket服务端和客户端通信
  14. 搭建AutoCAD License服务器
  15. 冰冻三尺非一日之寒——大型网站架构演进
  16. python-skimage.io,filters,transform
  17. win10查看电池损耗
  18. loadrunner 操作mysql_loadrunner学习笔记(从MYSQL中取数据)
  19. 遍历二维数组(从外向内绕圈)
  20. C++字符串赋值、拼接、查找、替换、存取、插入删除和子串

热门文章

  1. iOS 通过商品短链接跳转京东商品详情页
  2. 简单的Android 红外线遥控
  3. CVPR 2019 | SPADE 阅读笔记(翻译)
  4. 0CTF-2016-Web-piapiapia
  5. spark kryo java,在Spark中自定义Kryo序列化输入输出API
  6. 秋姑娘_我爱秋天作文300字
  7. 我的世界服务器无限矿区块指令,我的世界:不用动手也能挖到钻石?来自指令玩家的方法...
  8. 《廊桥遗梦》这样确切的爱,一生只有一次
  9. 1024程序员节日背后的神秘面纱
  10. 空间句法软件Axwoman6.3 安装及ArcGIS 工具加载