码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)


    什么是数组扁平化?

    数组扁平化:指将一个多维数组转化为一个一维数组。

    给定数组:

    var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

    目标值:

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

     方法:

    ​ 解决方案 1:使用 concat() 和 apply() ​

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var myNewArray = [].concat.apply([], myArray);
    4. return myNewArray;
    5. }
    6. flatten(myArray);
    7. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    ​ 解决方案 2:使用 reduce() ​

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var myNewArray = myArray.reduce(function(prev, curr) {
    4. return prev.concat(curr);
    5. });
    6. return myNewArray;
    7. }
    8. flatten(myArray);
    9. // [1, 2, 3, 4, 5, 6, 7, 8, 9]
    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. return arr.reduce((res,next) =>{
    4. return res.concat(Array.isArray(next)? flatten(next) : next);
    5. },[]);
    6. }
    7. flatten(myArray);
    8. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 3:递归遍历

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. let result = []
    4. for (const item of arr) {
    5. if (Array.isArray(item)) {
    6. result = result.concat(flatten1(item))
    7. } else {
    8. result.push(item)
    9. }
    10. }
    11. return result
    12. }
    13. flatten(myArray);
    14. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 4:在 ES6 中使用点差运算符(扩展运算符)

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var myNewArray = [].concat(...arr);
    4. return myNewArray;
    5. }
    6. flatten(myArray);
    7. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    ​ 解决方案 5:在 ES10 中使用 flat() ​

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var myNewArray = myArray.flat();
    4. return myNewArray;
    5. }
    6. flatten(myArray);
    7. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 6:for循环

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var res = [];
    4. for (let i = 0, length = arr.length; i < length; i++) {
    5. if (Array.isArray(arr[i])) {
    6. res = res.concat(flatten(arr[i])); //concat 并不会改变原数组
    7. //res.push(...flatten(arr[i])); //扩展运算符
    8. } else {
    9. res.push(arr[i]);
    10. }
    11. }
    12. return res;
    13. }
    14. flatten(myArray);
    15. //[1, 2, 3, 4, 5, 6, 7, 8, 9]

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. var myNewArray = [];
    4. for (var i = 0; i < arr.length; ++i) {
    5. for (var j = 0; j < arr[i].length; ++j)
    6. myNewArray.push(arr[i][j]);
    7. }
    8. return myNewArray;
    9. }
    10. flatten(myArray);
    11. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案7:while循环

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. while (arr.some(item => Array.isArray(item))) {
    4. arr = [].concat(...arr);
    5. //arr = Array.prototype.concat.apply([],arr);
    6. }
    7. return arr;
    8. }
    9. flatten(myArray);
    10. //[1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 8:使用toString()+split()或者join()+split()

    原理很简单,先把数组转换成字符串,这个过程会吧[]去掉,然后再调用split()方法转换成数组,最后不能忘了,吧每一项转换为数组,即调用map()方法。

    方法1:arr.toString().split(',').map(item => +item);

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. return arr.toString().split(',').map(item => +item);
    4. }
    5. flatten(myArray);
    6. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    方法2:arr.join(',').split(',').map(item => +item);

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. return arr.join(',').split(',').map(item => +item);
    4. }
    5. flatten(myArray);
    6. (9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 9:正则表达式

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. let result = JSON.stringify(arr);
    4. // JSON.stringify 转换后的结果 '[1,[2,34,[12,4]],23]'
    5. result = result.replace(/(\[|\])/g, '');
    6. return JSON.parse(`[${result}]`)
    7. }
    8. flatten(myArray);
    9. (9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

    解决方案 10:栈

    1. var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
    2. function flatten(arr) {
    3. let res = [];
    4. const stack = [].concat(arr);
    5. while (stack.length > 0) {
    6. // pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
    7. const item = stack.pop();
    8. if (Array.isArray(item)) {
    9. /**
    10. * push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
    11. * 用扩展运算符展开一层
    12. */
    13. stack.push(...item);
    14. } else {
    15. // unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。
    16. item !== undefined && res.unshift(item);
    17. }
    18. }
    19. return res;
    20. }
    21. flatten(myArray);
    22. // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    资料:

    JS数组扁平化的一些方法(7-8种) - 掘金引子:这些日子在看es相关的新属性是有一个数组的方法 flat() 引起的我的注意。 我去找了一下维基百科,上面并没有关于扁平化的直接解释,只有一个扁平化组织释义。 金字塔组织,这个众所周知,它表现的层级结构就是一个金字塔式的形状。 扁平化组织(Flat organizatio…https://juejin.cn/post/6844903805876699150js数组扁平化的六种方法_爱吃肉的薄凉的博客-CSDN博客_js数组扁平化处理我也不知道为什么要整理这么多种方法,算是拓展个思路吧。🤦‍♂️let array = [1, [2, 34, [12, 4]], 23];1.递归遍历function flatten1(array) { let result = [] for (const item of array) { if (Array.isArray(item)) { result = result.concat(flatten1(item)) } e.https://blog.csdn.net/weixin_43544093/article/details/123842757

  • 相关阅读:
    Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量
    ISM330DHCXTR IMU-惯性测量单元 工业物联网 运动传感器
    Spring boot 随笔 1 DatasourceInitializer
    在ubuntu上用QT写一个简单的C++小游戏(附源码)
    Java端集成drools6.4.0.Final
    vue2vue3生命周期详解
    梦想开一家咖啡店怎么样?只需做好这五点,梦想起飞
    联想混合云Lenovo xCloud:4大产品线+IT服务门户
    Vue3.0——Vue3简介、Vue3带来了什么、拥抱TypeScript、新的特性、Vue3.0环境集成
    Postman模拟上传文件
  • 原文地址:https://blog.csdn.net/qq_22182989/article/details/125496741
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号