首页 > 其他分享 >数组扁平化处理

数组扁平化处理

时间:2024-02-23 17:55:06浏览次数:13  
标签:arr 扁平化 处理 数组 33 let str 方法

需求

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr); // json格式字符串 '[\"1\",\"2\",\"33\",\"4\",\"5\"]'

实现方法1:

flat()方法:这个方法为ES10方法,目前未在所有浏览器中都兼容

let arr = [[1,2],[33,4],[5]];
// 参数指要提取嵌套数组的结构深度,默认值为1,即默认只处理第一层的数组结构
// Infinity 指递归嵌套的所有层级
let flatArray = arr.flat(Infinity);
console.log(flatArray);  

实现方法2:

replace()和split()方法

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr);
str.replace(/\[|\]/g, "").split(",");
// 或者str.replaceAll("[", "").replaceAll("]", "").split(",")

实现方法3:

字符串拼接

let arr = [[1,2],[33,4],[5]];
let str = JSON.stringify(arr);
str = str.replace(/\[|\]/g, "");
str = "[" + str + "]";
let newArr = JSON.parse(str); // JSON.parse是将json格式的字符串转换为json对象

实现方法4:

递归处理

let newArr = [];
function fn (arr) {
    for (let i = 0; i < arr.length; i++) {
       let item = arr[i];
       if (Array.isArray(item)) {
           fn(item);  
        } else {
           newArr.push(item);  
        }              
    }  
}    

let arr = [[1,2],[33,4],[5]];
fn(arr);

实现方法5:

reduce()方法

function flatten(arr) {
    return arr.reduce((pre, cur) => {
         return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
    })  
}

let arr = [[1,2],[33,4],[5]];
flatten(arr);
// concat方法将两个或多个数组合并为一个新数组
// reduce方法为数组中每个元素依次执行回调函数,可以作为一个累加器,数组中每个值(从左到右)开始缩减直至最终成为一个值,还可以用来将多维数组转化为一维数组
// 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// total: 初始值,或者计算结束后的返回值
// currentValue: 当前元素
// initialValue: 传递给函数的初始值
// currentIndex: 当前元素的索引
// arr: 当前元素所属的数组对象,数组中有多少个元素即有多少个数组对象

实现方法6:

扩展运算符

let arr = [1, 2, [3, 4], [5, [6, 7]]];
while(arr.some(Array.isArray)) {
  arr = [].concat(...arr);                  
};
// 通过循环和扩展运算符结合起来 some()方法返回一个布尔值,表示是否存在特定条件下的元素

标签:arr,扁平化,处理,数组,33,let,str,方法
From: https://www.cnblogs.com/wyl-k/p/18030101

相关文章

  • 异步线程处理request,导致参数获取为null
    原文链接:千万不要把Request传递到异步线程里面!有坑!一、post接口接口参数: 后端代码:@PostMapping("/postTest")publicStringpostTest(HttpServletRequestrequest,HttpServletResponseresponse){//AsyncContextasyncContext=request.startAsync(request,re......
  • python处理栅格数据
    字节序列:ReadRaster([xoff],[yoff],[xsize],[ysize],[buf_xsize],[buf_ysize],[buf_type],[band_list],[buf_pixel_space],[buf_line_space],[buf_band_space])xoff是列读取起点,默认值为0。yoff是行读取起点,默认值为0。xsize是读取的列数,默认为全部读取。ysize是读取的......
  • 图片加载失败后的占位图处理
    <img/>标签,如果因为网络或者跨域限制等原因无法正常加载,会出现图片裂开的样子,如果设置了alt属性值,则alt属性对应的内容也会一并显示。例如:   这样的效果是不太好看的我们可以用一张占位图去替换上面裂开的样式,这样更为美观,例如:      解决方式:1<div>2......
  • 代码随想录:数组
    二分查找二分查找是对数组中的区间进行查找。有两种写法:一种是在闭区间内进行查找,另一种是在左闭右开区间内进行查找。每次查找的时候只有按照这个方法就不会出错。二分查找写法一:classSolution{public:intsearch(vector<int>&nums,inttarget){intle......
  • 软件无线电处理平台设计方案:330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口
    一、板卡概述   本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3标准高速差分接口,支持PCIeX 2。软件具有windows,Linux驱动。 二、功能和技术指标......
  • FMC子卡设计资料原理图450-基于ADRV9009的双收双发射频FMC子卡 数字信号处理卡 射频收
    FMCJ450-基于ADRV9009的双收双发射频FMC子卡   一、板卡概述       ADRV9009是一款高集成度射频(RF)、捷变收发器,提供双通道发射器和接收器、集成式频率合成器以及数字信号处理功能。这款IC具备多样化的高性能和低功耗组合,FMC子卡为2路输入,2路输......
  • 沈阳中院(仅为代表,各地均按照下列方式处理)---买断式贴现在没有其他约定的情况下,不应当
    (2023)辽01民终1591号  沈阳普安消防工程有限公司、渤海银行股份有限公司沈阳分行等票据追索权纠纷民事二审民事上诉人主张:沈阳普安消防工程有限公司上诉请求:1.请求依法撤销沈阳市皇姑区人民法院(2022)辽0105民初5292号民事判决书;2.请求查明事实依法改判;3.本案诉讼费用由被上......
  • 处理问题,心态崩了?论一个程序员的基本素养
    分享是最有效的学习方式。博客:https://blog.ktdaddy.com/从最近一个经历说起周五了,轻松点儿,今天破例不写纯技术类的干货文了,聊聊最近一个比较郁闷的经历,这事儿发生在老猫自己身上,不是“总是遇到事故深陷于系统重构泥潭的倒霉小猫”,也不是苦苦面试找工作的“张小帅”(如果想要......
  • 后缀数组
    虽然这是基础算法,但我已经好几次忘记它怎么写了,反倒是SAM记得很牢。为了避免比赛中因这个爆蛋,我打算仔细梳理一下它的原理。问题:给你一个字符串,你需要求出\(sa_i,rk_i\),其中\(sa_i\)表示排名为\(i\)的后缀,\(rk_i\)表示后缀\(i\)的排名。首先暴力就是直接快排,里面......
  • 代码随想录算法训练营day02 | leetcode 977. 有序数组的平方、35.搜索插入位置、34.在
    题目链接:977.有序数组的平方-简单题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]......