JS 数组篇 多维数组扁平化

news/2024/7/19 16:39:11 标签: js, 前端, javascript, es6

概念:数组扁平化是指将一个多维数组变为一维数组

思想:遍历数组每一项,如果该项为数组,
方法总结

js">let arr = [1,2,3,['a','b'],[[4],[[[5,6],'c']]]]
  1. Array.prototype.flat

    js">const arr1 = [0, 1, 2, [3, 4]];
    console.log(arr1.flat());
    // expected output: [0, 1, 2, 3, 4]
    const arr2 = [0, 1, 2, [[[3, 4]]]];
    console.log(arr2.flat(2));  //flat 可以指定层数 ,默认为1
    // expected output: [0, 1, 2, [3, 4]]	
    

    当然,好的东西一定会有兼容性,ie不支持。

  2. Array.some + Array.cancat

    js">function flat (arr) {
      while (arr.some(item =>  Array.isArray(item))) {
        arr = [].concat(...arr)
      }
      return arr
    }
    console.log(flat(arr));
    //[1, 2, 3, 'a', 'b',4, 5, 6, 'c']
    
  3. Arrary.reduce + Array.concat

    js">function flat (arr) {
      var newArr = arr.reduce((prev, cur) => {
        return prev.concat(Array.isArray(cur) ? flat(cur) : cur)
      },[])
      return newArr
    }
    console.log(flat(arr));
    
  4. es5递归

    js">// es5
    let newArr = []
    function flat (arr) {
        for(let i = 0; i < arr.length; i++) {
          let item = arr[i];
          // if (Array.isArray(arr[i])){
          if(Object.prototype.toString.call(item)==='[object Array]'){
            flat(item)
          } else {
            newArr.push(item)
          }
        }
    }
    flat(arr)
    console.log(newArr);
    

http://www.niftyadmin.cn/n/1852517.html

相关文章

Oracle 10G Install on SuSE10

Oracle 10G Install on SuSE10 环境 anticell-suse:~ # uname -a Linux anticell-suse 2.6.16.46-0.12-bigsmp #1 SMP Thu May 17 14:00:09 UTC 2007 i686 i686 i386 GNU/Linux anticell-suse:~ # free -m total used free shared buffers cached …

视频只能播放一两帧,PDF文件60k以上加载失败的问题,静态访问也一样

linux环境 排查了各种端口过滤器&#xff0c;局域网访问等等都有这种问题&#xff0c;而8080端口是正常的&#xff0c;最后改了nginx的端口监听&#xff0c;才发现是 nginx的缓存出现问题 原由是客户改了用户组从而导致nginx没有缓存权限&#xff0c;nginx读取不了缓存从而造成…

18-Eclipse输入不了中文问题

之前一直被这个问题纠结&#xff0c;不知按错了哪个键&#xff0c;导致编码书写注释时中文输入失败。怎么切换输入法都无效。 而此时其他应用输入中文是没问题的&#xff0c;于是断定是eclipse快捷键导致。 CtrlShiftE eclipse默认切换编辑器&#xff0c;此快捷键导致。重新按此…

Intellj IDEA光标问题

Intellj IDEA光标为insert状态&#xff0c;无法删除内容以前用得是社区版的IDEA&#xff0c;今天装了14版本的&#xff0c;结果导入项目后&#xff0c;发现打开java文件的光标是win系统下按了insert键后的那种宽的光标&#xff0c;并且还无法删除内容&#xff0c;且按删除(dele…

Oracle 删除主键列

1、先去掉主键约束查出主键约束的名字SELECT * from user_cons_columns where table_nameAC_LOGININFO;取消主键约束alter table AC_LOGININFO drop constraint AC_LOGININFO_PK;2、删除列ALTER TABLE schema.table_name DROP COLUMN column_name [CASCADE CONSTRAINT];[…

JS 循环遍历总结

for 介绍 for 语句用于创建一个循环&#xff0c;它包含了三个可选的表达式&#xff0c;这三个表达式被包围在圆括号之中&#xff0c; 使用分号分隔&#xff0c;后跟一个用于在循环中执行的语句&#xff08;通常是一个块语句&#xff09;。示例 var i 0; for (; i < 9; i…

iperf网络测试

iperf网络测试文档地址&#xff1a; https://www.jianshu.com/p/942a9d9bc704 转载于:https://www.cnblogs.com/zhangb8042/p/10238624.html

JS 数组篇 数组排序方法总结

生成乱序数组 function arrRandom() {let arr [];for (let i 0; i < 10; i) {let num parseInt(Math.random() * 500);arr.push(num);}return arr; }sort() /**sort 排序*/ let arr arrRandom(); arr.sort((a, b) > a - b); console.log("sort-----" ar…