傲渊山岳 发表于 4 小时前

WPS JS宏编程教程(从根本到进阶)-- 第五部门:JS数组与WPS团结应用

择要

本章深入探究了 JavaScript 数组在 WPS 表格自动化中的高级应用,旨在资助读者把握数组利用的核心本领,轻松处置处罚复杂数据并提拔工作服从。通过详细的代码示例和逐行剖析,本章内容涵盖了数组的归并、打平、归并、切片、排序以及综合应用等多个方面。
起首,先容了 reduce 方法的强大功能,它可以大概将数组中的全部元素归并为一个单一值,实用于求和、求均匀值、求最大值和最小值等场景。通过实例代码,展示了怎样利用 reduce 对数组举行高效盘算,比方统计贩卖额总和、盘算均匀分以及筛选极值纪录。
接着,探究了怎样利用 flat 和 flatMap 方法将嵌套数组打平为一维数组,这对于处置处罚多层嵌套数据(如二维表格)非常实用。通过示例代码,展示了怎样将复杂的嵌套布局简化为一维数组,以便后续利用。
别的,还详细解说了 concat 方法的利用,用于将多个数组或值归并为一个新数组。这一方法在归并多列数据或扩展数组时尤为高效。通过实例,展示了怎样利用 concat 实现数组的机动归并。
在数组元素的添加与删除部门,先容了 push、pop、unshift 和 shift 方法的利用,分别实现了栈(后进先出)和队列(先辈先出)的利用。通过代码示例,展示了怎样利用这些方法动态管理数组数据。
本章还重点先容了 slice 方法的机动应用,用于从数组中提取子数组。通过实例,展示了怎样利用正索引、负索引或肴杂索引提取特定范围的数据,实用于数据分析和展示场景。
末了,通过多个综合实例,展示了怎样将这些方法团结利用,办理现实工作中的复杂题目。比方,怎样从多列数据中筛选满意条件的纪录并排序,怎样将不规范数据整理为布局化数据,以及怎样从字符串中提取最大值纪录等。这些实例不但展示了数组方法的强大功能,还提供了现实利用的完备流程。
通过学习本章内容,读者将可以大概纯熟把握 JavaScript 数组在 WPS 表格中的高级应用,轻松应对各种数据处置处罚需求,显着提拔工作服从。无论是初学者还是有肯定根本的开辟者,都能从这些实用本领中获益匪浅。
<hr> 全部章节教程word文件可以点击如下链接获取
wps-excel办公+JS宏编程教程根本到进阶+函数利用手册
第5章 JS数组与WPS团结应用

<hr> 5-1 JS数组的核心特性

数组是JavaScript中用于存储有序数据的核心布局,其特性决定了它在WPS表格自动化中的高效性。
核心特性剖析


[*]动态性:数组长度可自由扩展或紧缩,无需预界说巨细。
[*]元素多样性:支持恣意范例数据(数字、字符串、对象、乃至嵌套数组)。
[*]索引机制:元素位置从0开始编号,支持快速随机访问。
[*]希奇性:答应存在空元素(如),节省内存空间。
[*]一维本质:JS只有一维数组,但可通过嵌套模拟多维布局。
<hr> 5-2 数组的两种创建方式(字面量与扩展利用符)

1. 字面量创建

function test1() {
   
   
    var arr1 = [];               // 空数组
    var arr2 = ["张三", 24, 100]; // 混合类型元素
    var arr3 = ;       // 稀疏数组(中间空元素)
}
解释:


[*]arr1:空数组,常用于初始化。
[*]arr2:包罗字符串、数字、乃至表达式的动态数组。
[*]arr3:希奇数组,第二个元素未界说(表现为empty)。
2. 扩展利用符创建

function test2() {
   
   
    var arr1 = ;
    var arr2 = [...arr1];      // 复制数组:
    var arr3 = [..."12345"];   // 字符串转数组:["1","2","3","4","5"]
    var arr4 = [...arr3, 6, 7];// 合并数组:["1","2","3","4","5",6,7]
}
剖析:


[*]...利用符可将可迭代对象睁开,常用于复制或归并数组。
[*]输入范例:数组、字符串、Set等可迭代对象。
[*]输出范例:新数组。
<hr> 5-3 数组创建应用:提取字符串中的数字

需求阐明

从肴杂字符串中提取数字(如“曾贤志89”提取为)。
代码实现

function test() {
   
   
    var newarr = [];                        // 初始化结果数组
    var Rngs = Range("A2", Cells(999, 1).End(xlUp)); // 获取A列数据区域
    for (var Rng of Rngs) {
   
                      // 遍历每个单元格
      var arr = [...Rng.Value()];         // 将单元格值转为字符数组
      for (var ar of arr) {
   
                  // 遍历每个字符
            if (Number(ar) > -1) {
   
               // 判断是否为数字
                newarr = [...newarr, ar];   // 将数字加入结果数组
            }
      }
      Rng.Offset(0, 1).Value = newarr.join(","); // 写入相邻单元格
      newarr = [];                        // 清空临时数组
    }
}
逐行剖析:

[*]Range("A2", Cells(999, 1).End(xlUp)):动态获取A列数据地域,制止处置处罚空单元格。
[*][...Rng.Value()]:将单元格内容(如“A89”)拆分为字符数组["A","8","9"]。
[*]Number(ar) > -1:过滤非数字字符(如字母返回NaN,条件不创建)。
[*]join(","):将数组转换为以逗号分隔的字符串,便于写入单元格。
<hr> 5-4 用函数创建数组(new Array、Array.of、Array.from)

1. new Array

function test1() {
   
   
    var arr1 = new Array();      // 空数组:[]
    var arr2 = new Array(5);   // 长度5的空数组:
    var arr3 = new Array(10,4,8);// 含元素的数组:
}
留意:new Array(5)会创建希奇数组,直接访问元素返回undefined。
2. Array.of

function test2() {
   
   
    var arr1 = Array.of();       // 空数组:[]
    var arr2 = Array.of(5);      // 单元素数组:
    var arr3 = Array.of(10,4,8); // 多元素数组:
}
与new Array区别:Array.of(5)创建的是而非长度为5的空数组。
3. Array.from

function test3() {
   
   
    var arr = ;
    var arr1 = Array.from(arr);            // 复制数组:
    var arr2 = Array.from("9527");         // 字符串转数组:["9","5","2","7"]
    var arr3 = Array.from(, x => x*10); // 映射转换:
}
参数剖析:


[*]第一个参数:可迭代对象(如数组、字符串)。
[*]第二个参数(可选):映射函数,对每个元素举行处置处罚。
<hr> 5-5 函数创建数组应用:按条件格式化数据

需求阐明

筛选结果≥90分的数据,并盘算其占总分的比例。
代码实现

function test() {
   
   
    var Rngs = Range("A2", Range("A9999").End(xlUp)); // 获取数据区域
    for (var Rng of Rngs) {
   
                           // 遍历每行
      var arr = Rng.Offset(0,1).Resize(1,12).Value(); // 读取12个月数据
      var newarr = [];
      var wsf = WorksheetFunction;
      for (var ar of arr) {
   
                           // 筛选≥90的数据
            if (ar >= 90) newarr.push(ar);
      }
      var total = wsf.Sum(newarr);               // 计算总分
      var arr1 = Array.from(newarr, x => `${
   
   x}(${
   
   wsf.Text(x/total, "0%")})`);
      Rng.Offset(0,13).Value2 = arr1.join(", ");   // 写入结果
    }
}
关键点剖析:


[*]Resize(1,12):从当前行向右扩展12列,读取月度数据。
[*]Array.from映射:将分数转换为分数(占比)格式,如"90(25%)"。
<hr> 5-6 数组元素的读写改利用

核心利用剖析

数组通过索引直接访问或修改元素,支持动态扩展和范例肴杂存储。
代码示例

function test1() {
   
   
    var arr = ;          // 初始化数组:
    arr = 199;             // 修改第一个元素:
    arr = "JS";            // 动态扩展数组:
    arr = 1000;            // 跳过索引2-3,直接赋值索引4:
    Console.log(arr);       // 输出:undefined(空元素)
}
输入输出阐明



[*]输入范例:恣意数据范例。
[*]输出范例:数组元素按索引位置返回。
[*]数据示例:
   
[*]初始数组:   
[*]修改后:   

<hr> 5-7 单元格地域与JS数组的交互

需求阐明

将WPS表格中的单元格数据读取为数组,或将数组写入单元格地域。
代码实现

function 读取() {
   
   
    // 读取单行数据(A2:E2)
    var arr1 = Range("A2:E2").Value();      // 返回二维数组:[]
    // 读取单列数据(A2:A9)
    var arr2 = Range("A2:A9").Value();      // 返回二维数组:[,,...,]
    // 读取多行多列数据(A2:E9)
    var arr3 = Range("A2:E9").Value();      // 返回二维数组(5行5列)
}

function 写入() {
   
   
    // 将一维数组写入A1:C1
    Range("A1:C1").Value2 = ;      // A1=1, B1=2, C1=3
}
表格布局示例

         A    B    C    D    E              2    数据1    数据2    数据3    数据4    数据5          3    数据6    数据7    数据8    数据9    数据10      

[*]读取结果:arr3 = [["数据1","数据2","数据3","数据4","数据5"], ["数据6","数据7","数据8","数据9","数据10"]]
<hr> 5-8 单元格与数组应用:提取首个满意条件的数据

需求阐明

从月度贩卖数据中提取第一个贩卖额≥100的月份及数值。
代码实现

function test() {
   
   
    var LastCell = Range("A9999").End(xlUp);// 获取最后一行
    var Rngs = Range("A2", LastCell);         // 数据区域(A2到末尾)
    for (var Rng of Rngs) {
   
                      // 遍历每行
      var arr = Rng.Offset(0, 1).Resize(1, 12).Value(); // 读取12个月数据
      var arr1 = Array.from(arr, x => x >= 100);         // 生成布尔数组
      var num = WorksheetFunction.Match(true, arr1, 0);    // 查找第一个true的位置
      var val = Rng.Offset(0, num).Value();                // 获取对应值
      Rng.Offset(0, 13).Value2 = `${
   
   val}(${
   
   num}月)`;   // 写入结果
    }
}
输入输出示例



[*]输入表格片断(B2:M2):                  1月      2月      3月      …      7月      …                      84      73      73      …      100      …         
[*]输出结果:100(7月)
<hr> 5-9 数组长度控制与切片功能

核心功能

通过修改数组的length属性实现动态截断或扩展。
代码示例

function test() {
   
   
    var c = ;
    c.length = 3;            // 截断为前3个元素:
    c.length = 5;            // 扩展为长度5:
}
应用场景

动态调解数据规模,比方仅生存有效数据部门。
<hr> 5-10 数组元素的添加与删除

栈与队列利用

function test1() {
   
   
    var arr = [];
    arr.push("a");          // 尾部添加元素:["a"]
    arr.push("b", "c");   // 添加多个元素:["a","b","c"]
    arr.pop();            // 删除尾部元素:["a","b"]
}

function test2() {
   
   
    var arr = ["a","b","c","d","e"];
    arr.shift();            // 删除头部元素:["b","c","d","e"]
    delete arr;          // 删除索引1元素:["b", empty, "d","e"]
}
方法对比



[*]push/pop:栈布局(后进先出)。
[*]shift/unshift:队列布局(先辈先出)。
<hr> 5-11 添加删除应用1:提取求和最大纪录

需求阐明

从季度贩卖数据中提取总贩卖额最大的员工纪录。
代码实现

function test() {
   
   
    var wsf = WorksheetFunction;
    var newarr = [];
    var counter = wsf.CountA(Range("A:A"));            // 统计A列非空单元格数
    for (var num = 2; num <= counter; num++) {
   
            // 遍历数据行(从第2行开始)
      var arr = Range(`B${
   
   num}:E${
   
   num}`).Value(); // 读取B-E列季度数据
      newarr.push(wsf.Sum(arr));                     // 计算季度总和并存入数组
    }
    var mx = wsf.Max(newarr);                        // 找到最大值
    var pos = wsf.Match(mx, newarr, 0);                // 获取最大值位置
    var na = Range("A" + (pos + 1)).Value();         // 获取对应员工姓名
    alert(`最大值:<h1 style='color:red'>${
   
   mx}</h1>\n对应员工为:${
   
   na}`);
}
输入表格示例

         A    B    C    D    E              1    姓名    Q1    Q2    Q3    Q4          2    张三    121    127    130    106          3    李四    94    148    121    131          4    王二麻    150    150    108    109       输出结果



[*]最大值:150 + 150 + 108 + 109 = 517
[*]对应员工:王二麻
<hr> 5-12 添加删除应用2:二维地域转嵌套数组

需求阐明

将二维表格地域转换为嵌套数组布局(每3行一组)。
代码实现

function test() {
   
   
    var bigarr = [], smallarr = [];
    var Rngs
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: WPS JS宏编程教程(从根本到进阶)-- 第五部门:JS数组与WPS团结应用