JS实现数组扁平化

文章目录

  • JS实现数组扁平化
    • 一、递归实现
    • 二、flat实现
    • 三、通过扩展运算符实现
  • JS对象扁平化

一、递归实现

  • map实现
const arr = [[0], 1, 2, [3, [4, 5]],[1,2,5,8],6];
Array.prototype.flat = function(){const result = this.map((item)=>{if(Array.isArray(item)){return item.flat();}else{return [item];}});// ...扩展运算符能将数组转换为逗号分割的参数序列return [].concat(...result)
}
console.log(arr.flat());
let tmp = [...new Set(arr.flat())];
console.log(tmp);
function flatten(arr){const res =  arr.map(item =>{if(Array.isArray(item)){return flatten(item);}else{return [item];}})return [].concat(...res)
}
console.log(flatten(arr));
  • for of 实现
const arr = [[0], 1, 2, [3, [4, 5]],[1,2,5,8],6];
function flatten(sourceArray, flattenedArray = []){for (const element of sourceArray) {if (Array.isArray(element)) {flatten(element, flattenedArray);} else {flattenedArray.push(element);}}return flattenedArray;
}
console.log(flatten(arr));

二、flat实现

ES6 中的 flat ⽅法来实现数组扁平化。flat ⽅法的语法:arr.flat ( [depth] )其中 depth 是 flat 的参数,depth 是可以传递数组的展开深度(默认不填、数值是 1),即展开⼀层数组。如果层数不确定,参数可以传进 Infinity,代表不论多少层都要展开:

const arr = [[0], 1, 2, [3, [4, 5]],[1,2,5,8],6];
function flatten(arr){return arr.flat(Infinity);
}
console.log(flatten(arr));

三、通过扩展运算符实现

这个⽅法的实现,采⽤了扩展运算符和 some 的⽅法,两者共同使⽤,达到数组扁平化的⽬的

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

JS对象扁平化

//对象扁平化
function flat(obj) {var newObj = {};function format(o, pre) {for (let key in o) {if (typeof o[key] === 'object') {if (!pre) {format(o[key], key);}else {if (Array.isArray(o)) {format(o[key], pre + '[' + key + ']');}else {format(o[key], pre + '.' + key);}}}else {if (!pre) {newObj[key] = o[key];}else {if (Array.isArray(o)) {newObj[pre + '[' + key + ']'] = o[key];}else {newObj[pre + '.' + key] = o[key];}}}}}format(obj, null);return newObj;
}

JS实现数组/对象扁平化相关推荐

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

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

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

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

  3. JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)

    推荐阅读: js对象扁平化:_南北极之间的博客-CSDN博客_js扁平化js对象扁平化的方法:1.使用 concat() 方法在2. 使用 flat() 方法3.使用用户定义的函数此示例将设置一个包含 ...

  4. js检测数组对象中是否有重复值

    判断数组对象里的某个值是否都是同一个值 isRepeat=(arr)=> {var hash = {};for(let i=0;i<arr.length;i++){if (!hash[ar ...

  5. Python学习 Day31 JS类数组对象

    JS类数组对象 一.三元运算符 概述:三元运算符由三部分组成,使用语法如下: A ? B : C 三元运算符A:它需要的是一个布尔值(其他类型数值也可以,但是需要隐式转换为布尔值) 如果A部分为布尔值 ...

  6. JavaScript 对象扁平化

    JavaScript对象扁平化 我们平时肯定遇到过多层嵌套的对象,name如何将它扁平化呢?一起来看看吧! 函数封装如下: function flatten (obj) {const ans = {} ...

  7. js给数组添加数据的方式/js 向数组对象中添加属性和属性值

    参考:https://www.cnblogs.com/ayaa/p/14732349.html js给数组添加数据的方式有以下几种: 直接利用数组下标赋值来增加(数组的下标起始值是0) 例,先存在一个 ...

  8. 动态js创建数组对象

    动态js创建数组对象 var items = []; for (var i = 0; i < 10; i++) { items.push({ id: i, level: i + '级' }) }

  9. js前端数组对象键大写下划线转驼峰

    js前端数组对象键大写下划线转驼峰 我是分为两步去进行转的 第一步,先将对象的键从大写转换为小写 第二步,再将下划线转为驼峰格式 1.大写转小写代码参考如下 upLowercase(inputObj) ...

  10. 我知道的JavaScript--Json对象扁平化

    引子: 在Asp.net mvc 框架下用Ajax方法提交一个复杂的Json 对象到Action方法上, 会出现一些问题,这里我们用Javascript 的方式去解决这个问题,在asp.net mvc ...

最新文章

  1. HTML中的button标签的使用,和介绍
  2. The differences between capturing and bubbling
  3. Qt5:为窗口 创建工具栏 toobar
  4. Easyx项目小合集
  5. ITK:使用平面结构元素腐蚀二进制图像
  6. Alpha Blending a Bitmap 失败 原因
  7. python字符串函数的find方法_Python string模块 字符串函数方法操作教程
  8. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...
  9. ldd查看程序依赖库(转载)
  10. 淘宝现在什么类目比较好做?
  11. 利用OpenCV实现对车流量的统计
  12. 银联标准之MAC算法实现(POS终端加密)
  13. “黑暗潜伏者” -- 手机病毒新型攻击方式
  14. 数字化改造大宗商品供应链 ,为大宗商品贸易增添活力
  15. arxiv提交论文避坑指南
  16. winhex中判断+MBR+DBR+EBR方法
  17. 项目实战——打造一款股票区间交易盯盘系统
  18. 小程序预览加载不出图片
  19. ubuntu-18.04一键安装ros
  20. python字节流转化为字符串报错_python3.x,_关于Python3字符串转换为字节流的问题,python3.x - phpStudy...

热门文章

  1. SVM原理:超平面方程
  2. SpringBoot2.1.9 多MongoDB配置template
  3. Deprecated: Function eregi() is deprecated in ……【解决方法】
  4. woff文件 服务器上找不到,vue Iview 项目部署到服务器上woff2文件 net::ERR_ABORTED 404 (Not Found)怎么处理?...
  5. 高通apq8096连接外网
  6. python 时间序列分解 stl_时间序列分解-STL分解法
  7. 相关系数、相关指数和回归系数等概念含义
  8. 武汉代茜2017级计算机科学与技术,毕业论文致谢拾贝(二)
  9. 冰点还原精灵使用教程
  10. dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载