JS数组打平的三种方法

WPS JS宏编程教程(从基础到进阶)-- 第五部分:JS数组与WPS结合应用 本章深入探讨了 JavaScript 数组在 WPS 表格自动化中的高级应用,旨在帮助读者掌握数组操作的核心技巧,轻松处理复杂数据并提升工作效率。通过详细的代码示例和逐行解析,本章内容涵盖了数组的归并、打平、合并、切片、排序以及综合应用等多个方面。 阅读详情

1.用迭代或者递归打平数组

ECMAScript在Array.prototype上增加了:两个方法flat(),flatMap()。
在没有这两个方法之前,打平数组就要用迭代或者递归的方法
如下示例:

function flatten(sourceArray, flattenedArray = []){
    for (const element of sourceArray) {
        if (Array.isArray(element)) {
            flatten(element, flattenedArray);
        } else {
            flattenedArray.push(element);
        }
    }
    return flattenedArray;
}

const arr = [[0], 1, 2, [3, [4, 5]], 6];
console.log(flatten(arr))
//[0, 1, 2, 3, 4, 5, 6]

但可选择打平到第几级就更好了(通过添加参数depth改写)

function flatten(sourceArray, depth, flattenedArray = []){
    for (const element of sourceArray) {
        if (Array.isArray(element) && depth > 0) {
            flatten(element, depth -1, flattenedArray);
        } else {
            flattenedArray.push(element);
        }
    }
    return flattenedArray;
}

const arr = [[0], 1, 2, [3, [4, 5]], 6];
console.log(flatten(arr,1))
//[0, 1, 2, 3, [4, 5], 6]

2.Array.prototype.flat(depth)打平数组

为了更规范,增加的Array.prototype.flat(depth)就可以实现上述功能

Array.prototype.flat(depth)接受一个depth参数,返回一个要打平Array实例的浅复制本。

const arr = [[0], 1, 2, [3, [4, 5]], 6];
console.log(arr.flat(2));
//[0, 1, 2, 3, 4, 5, 6]

3.Array.prototype.flatMap()打平数组

Array.prototype.flatMap()打平数组会执行一次映射操作,比Array.prototype.flat(depth)高效,浏览器之用执行一次遍历.
flatMap()的函数签名与map相同。例子如下:

const arr = [[1], [3], [5]];
console.log(arr.map([x] => [x, x+1]));
//[[1, 2], [3, 4], [5, 6]]

console.log(arr.flatMap([x] => [x, x+1]));
//[0, 1, 2, 3, [4, 5], 6]
5-23 WPS JS宏fat与flatMap数组打平迭代和reverse反转数组元素、Transpose转置 摘要:本文展示了数组操作的多种方法,包括数组打平(flat)、映射打平(flatMap)、反转(reverse)和转置(Transpose)等。通过示例代码演示了如何将多维数组转换为单维数组,以及如何高效地进行数组转置操作。特别比较了flatMap与map+flat组合的性能差异,并提供了Excel范围数据转置的实际应用案例,最后展示了如何通过循环将转置后的数组值复制到指定单元格区域。这些方法适用于需要处理复杂数组结构的场景。 阅读详情

相关推荐

5-12 WPS JS宏 Range数组规范性测试

JS宏中Range()数组有两种写法(Range("a2:m2")和Range("a2","m2")),功能相同但语法不同。Value()方法可将Range转为二维数组,使用[0]可获取第一行数据,flat()可打平数组为1维。测试显示Range()支持选择行、列或多行多列区域,经Value()转换后均为二维数组,flat()后变为一维数组。不同写法的Range()对象在转换为数组后表现一致。

学而不厌,学者也,诲人不倦,师者也,两者合一,大师也。 1442

JSJavaScript数组-操作方法-concat-数组强制打平-slice-splice方法使用

文章目录1. concat()强制不打平数组强制打平数组2. slice()3. splice()1. 删除2. 插入3. 替换 对于数组元素,有很多操作方法,今天来介绍三种最常见操作方法分别是concat()、slice()、splice()方法~ 1. concat() 在现在数组全部元素基础上创建一个新数组 创建一个当前数组的副本 把它的参数添加至副本末尾 返回新构建的数组 let colors = ["red", "green", "blue"]; let colors2 = color.c

YK菌的博客 745

基于遗传算法的柔性作业车间调度(初始化以及编码策略)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

菜鸡 8560

JS 数组拍平(多种方法

JS 数组拍平(多种方法

潮汐未见潮落的博客 3676

JS数组打平方法

ECMAScript 2019 在 Array.prototype 上增加了两个方法:flat()和 flatMap()。这两个方法打平数组提供了便利。如果没有这两个方法,则打平数组就要使用迭代或递归。 数组打平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组 注意 flat()和 flatMap()只能用于打平嵌套数组。嵌套的可迭代对象如 Map 和 Set不能打平。 在没有这两个方法之前,打平数组就要用迭代或者递归的方法 function flatten(sourceArray,

qq_45954420的博客 3012

js平铺多维数组

在前端面试的时候,经常会有这样一道笔试题,将多维数组平铺成一维数组,例如将[1,2,[3,4,[5,6,7]]]处理成[1,2,3,4,5,6,7],下面是我总结的三种方式。 递归处理 这个方法比较常见,就是遍历每个元素,元素是基本数据类型的话便放进新数组中,如果元素是数组类型,则进行递归继续处理。 let arr1=[] const tileArr = (arr) => { for(let i=0;i<arr.length;i++){ if (Array.i

乔路非 1万+

JS数组拍平(数组扁平化)的6种方式

1.数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组。 2.实现 var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]]; ①:递归实现 function fn(arr){    let arr1 = [] arr.forEach((val)=>{ if(val instanceof Array){ arr1 = arr1.concat(fn(val)) }else{

weixin_45847735的博客 6225

js数组拍平

数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组。 var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]]; 1 递归法 function fn(arr) { let arr1 = [] arr.forEach((val) => { if (val instanceof Array) { arr1 = arr1.concat(fn(val)) } else {

weixin_45695200的博客 644

JavaScript 数组打平数组多层子级合并为一个(树结构合并)数组js递归打平数组

JavaScript 数组打平数组多层子级合并为一个(树结构合并)数组js递归打平数组

词不达意难知的博客 2395

多层级数组打平 JS

【代码】多层级数组打平 JS

zhu_menglu的博客 312

打平数组

打平数组,又称数组拍平,数组扁平化,就是将数组里面的数组打开,最后合并为一个数组 let array = [1,[2,3,4],5,6,[7,8,9,[10,11,12,[13,14]]],15] //使用递归思想 //方法-: let resultArray = [] function arraySpread(array) { array.forEach(item => { if (item instanceof Array) { arrayS.

sunbeibei00000的博客 1140

5-24 WPS JS宏concat数组的合并(合并打平嵌套数组)

/监视窗口:arr3=[1,1,Array(2),3,4,5],类型:Array/object。//监视窗口:arr5=[1,"你好","你","好"],类型:Array/object。//监视窗口:arr2=[1,2,3,4,5],类型:Array/object。//监视窗口:arr4=[1,1,2,3,4],类型:Array/object。

学而不厌,学者也,诲人不倦,师者也,两者合一,大师也。 543

js 数组及其方法

js数组是动态的,会按需增大或缩小。是一种特殊的对象,数组索引是整数的属性名(但访问数值索引的数组元素明显快于访问常规对象的对象属性)。

KEEP CODING 390

JSjavascript 集合引用类型ⅠArray 数组

Array 数组1. 数组的声明与初始化2. Array.from()3. Array.of()4. length5. 迭代器方法6. 复制和填充方法6.1 copyWithin()6.2 fill()7. 栈方法和队列方法pop()shift()8. 排序方法sort()9. concat()9.1 Symbol.isConcatSpreadable 数组打平10. slice()11. splice()12. 断言函数find(),findIndex() 1. 数组的声明与初始化 1.1 使用Array

qq_43515448的博客 508

JavaScript数组的种种

研读JavaScript高级程序设计(第四版)数组

唯爱赞多的博客 927

JavaScript数组操作方法之concat()与slice()、splice()方法

一、concat()方法 对于数组中的元素,我们有很多操作方法。比如,concat()方法可以在现有数组全部元素基础上创建一个新数组。它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。 如果传入一个或多个数组,则concat()会把这些数组的每一项都添加到结果数组。如果参数不是数组,则直接把它们添加到结果数组末尾。来看下面的例子: let colors = ["red", "green", "blue"]; let colors2 = colors.concat("y

ALiang 689

数组打平

let arr = [1,2.58,[4,5,[6,9]],[8,9]] Array.prototype.flat = function(){ let arr = [] this.forEatch((item)=>{ if(Array.isArray(item)){ arr=arr.concat(item.flat()) }else{ arr.push(item) } }) return arr } console.log(arr.flat())

qq_42975676的博客 691

JS】你不得不知道的JavaScript数组相关知识【全面总结】复习专用

数组创建 数组方法 数组属性

YK菌的博客 472

javascript基础学习系列七十八:操作方法

接下来,方法 slice()用于创建一个包含原有数组中一个或多个元素的新数组。如果有两个参数,则 slice()返回从开始索引到结束索引对应的所有元素,其 中不包含结束索引对应的元素。记住,这个操作不影响原始数组打平数组参数的行为可以重写,方法是在参数数组上指定一个特殊的符号:Symbol.isConcat- Spreadable。它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这 个新构建的数组。如果传入一个或多个数组,则 concat()会把这些数组的每一项都添加到结果数组

m0_68635815的博客 433

《AgentScope-Java 深入浅出教程》第1章 AgentScope-Java 简介

AgentScope-Java 是一个面向智能体的编程框架,专门用于构建基于大语言模型(LLM)的 AI 应用程序。│ 你的业务应用 ││ AgentScope-Java 框架 ││ │ 智能体 │ │ 工具 │ │ 记忆 │ │ 模型 │ ││ LLM 服务 (DashScope/OpenAI/...) │能力说明类比ReAct 推理让智能体能够"思考"并"行动"就像人类思考后再做事工具调用让智能体能够执行外部操作就像人使用计算器、搜索引擎记忆管理让智能体能够记住对话历史。

步子哥的博客 531

计算机毕业设计带源码 +论文26套

计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套计算机毕业设计带源码 +论文26套

上一篇: node报错:-4078, MySQL报错:1045
下一篇: 报错:error Component name “XX“ should always be multi-word &&[vue-router] uncaught error during route
shakalaca
博客等级 码龄7年 26粉丝 · 67原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值