您的位置:首页 > 娱乐 > 明星 > 济南app开发公司哪家好_中国网络营销平台_长沙推广公司_中国疫情最新消息

济南app开发公司哪家好_中国网络营销平台_长沙推广公司_中国疫情最新消息

2025/4/17 19:32:10 来源:https://blog.csdn.net/u014541881/article/details/147100320  浏览:    关键词:济南app开发公司哪家好_中国网络营销平台_长沙推广公司_中国疫情最新消息
济南app开发公司哪家好_中国网络营销平台_长沙推广公司_中国疫情最新消息

目录

  • 第6章 JS集合与映射在 WPS 的应用
    • 6-1 集合的创建(实例:唯一值提取)
      • 示例代码
      • 详细解析
      • Excel 环境模拟说明
    • 6-2 集合的不重复特性应用(案例:提取唯一值记录)
      • 示例代码
      • 详细解析
      • 案例说明
    • 6-3 集合成员添加与删除
      • 示例代码
      • 代码解析
      • 直观示意(Excel 模拟表格)
    • 6-4 集合成员添加与删除应用(不重复随机数)
      • 示例代码
      • 代码解析
      • 直观示意(Excel 模拟表格)
    • 6-5 集合成员迭代(随机生成试题)
      • 示例代码
      • 代码解析
      • 模拟 Excel 题库展示
    • 6-6 并集:数组完成并集
      • 方法 1:直接使用数组展开与 Set 构造
        • 代码示例
        • 详细说明
      • 方法 2:对嵌套数组进行扁平化后取并集
        • 代码示例
        • 详细说明
      • 方法 3:利用 Excel 单元格区域数据进行并集计算
        • 代码示例
        • 详细说明
    • 6-7 交集:数组完成交集
      • 方法 1:数组交集(利用 filter 与 includes)
        • 代码示例
        • 详细说明
      • 方法 2:集合交集(利用 Set 与 filter)
      • 代码示例
        • 详细说明
      • 实例:统计3列同时出现的姓名
        • 代码示例
        • 详细说明
    • 6-8 差集:数组完成差集
      • 方法 1:计算单值差集
        • 代码示例
        • 详细说明
      • 方法 2:计算数组差集(针对数组元素为数组)
        • 代码示例
        • 详细说明
      • 实例:获取未完成订单
        • 代码示例
        • 详细说明
    • 6-9 映射的添加、修改、删除
        • 代码示例
        • 详细说明
    • 6-10 映射应用:最后 1 条记录 & 第 1 条记录获取
      • 获取最后 1 条记录
        • 代码示例
        • 详细说明
      • 获取第 1 条记录
      • 代码示例
        • 详细说明
    • 6-11 映射中键值的循环
        • 代码示例(方式1:for-of 循环)
        • 代码示例(方式2:forEach 遍历)
        • 详细说明
    • 6-12 实例1:按字段分组求和
      • 代码示例
      • 详细说明
    • 6-13 实例2:拆分记录到表格
      • 代码示例
      • 详细说明


第6章 JS集合与映射在 WPS 的应用

本章主要介绍如何在 WPS 中利用 JavaScript 的集合(Set)和映射(Map)对象来处理 Excel 数据。通过这一章,你将学会如何利用集合的唯一性、迭代以及集合和数组之间的互相转换操作,以实现数据去重、并集、交集、差集等常见需求。同时还将介绍映射操作、分组求和和记录拆分等技巧。

由于 WPS JS 宏编程的环境与标准 JavaScript 基本一致,本章中提供的案例既讲解了语法细节,也结合实际业务场景(如提取唯一值、生成不重复随机数、组卷等),帮助开发者编写出高效、易读的代码。


6-1 集合的创建(实例:唯一值提取)

在这一节中,我们使用 ES6 中的 Set 对象来创建集合,并利用其不允许重复的特性提取唯一值。下面的示例演示了如何从数组或字符串构造集合,再将集合转换为数组,以及如何统计集合中的元素个数。

示例代码

function test(){// 创建一个空集合, Set 的数据类型:Set<any>// 用于存储任意类型的数据(例如字符串、数字等)var s1 = new Set(); // 创建一个空集合// 通过传入数组来构造集合,数组中的重复元素会被自动去除// 输入示例:["a", "b", "c", "b"],输出集合中元素为: "a", "b", "c"var s2 = new Set(["a", "b", "c", "b"]);// 利用字符串(可迭代对象)创建集合,字符串中每个字符被视为一个元素// 输入示例:"aabbbcddff",输出集合中元素为: "a", "b", "c", "d", "f"var s3 = new Set("aabbbcddff");// 使用扩展操作符 [...] 将集合转换成数组// 这样就可以得到唯一值数组,输入例子与 s2 类似// 输出示例:["a", "b", "c"]var s4 = [...new Set(["a", "b", "c", "b"])];// 获取集合 s3 的元素个数,Set.prototype.size 属性返回集合中唯一值的数量// 例如,s3 的唯一字符个数为 5var n = s3.size; // 统计集合的元素个数// 调试输出到控制台(在 WPS 中可以用 Console.log 来输出调试信息)Console.log("s2集合内容:", [...s2]);Console.log("s3集合内容:", [...s3]);Console.log("s4转换数组结果:", s4);Console.log("s3的元素个数 n:", n);
}

详细解析

  • 函数定义

    • 函数名称test
    • 输入:无参数(void 类型)
    • 输出:无返回值,通过调试输出展示结果
  • 变量与数据结构解析

    • s1:一个空的 Set 集合,初始时不包含任何元素。
    • s2:利用数组 ["a", "b", "c", "b"] 构造的集合,因集合自动去重,最终存储的值为 "a""b""c"
    • s3:由字符串 "aabbbcddff" 构造,字符串作为可迭代对象,其每个字符作为单个元素加入集合;最终得到的集合包含 "a""b""c""d""f"
    • s4:将 Set 对象转换成数组,可以方便后续使用数组方法进行操作。
    • n:记录集合 s3 的元素数量。通过 .size 属性获取,类型为 number,示例值为 5。
  • 代码注释说明
    每一行代码均附带了详细注释,描述了该行代码的功能、变量类型以及处理的数据示例,有助于初学者理解代码的逻辑。

  • 调试输出
    使用 Console.log 输出每一步操作的结果,方便开发者在 WPS 宏环境中进行结果查看(需要在 WPS 调试窗口中查看输出)。

Excel 环境模拟说明

在实际操作中,很多案例会结合 Excel 单元格数据。例如,如果你要提取一列中的唯一记录,你可以将该列数据读入数组,然后利用 Set 的去重特性进行处理。
假设 Excel 中 A 列有如下数据(以表格形式表示):

行号数据
2apple
3banana
4apple
5orange

利用类似以下代码:

var arr = Range("A2:A5").Value();
var uniqueArr = [...new Set(arr)];

最终 uniqueArr 将为 ["apple", "banana", "orange"]。这种方法简洁高效,极大地提升了数据处理效率。


6-2 集合的不重复特性应用(案例:提取唯一值记录)

在本节中,基于前面的集合创建,进一步利用集合的唯一性来提取 Excel 范围内具有不重复特性的记录。这里以提取每天仅保留一笔销售记录为例,演示如何通过集合操作实现“唯一值记录”的抽取。

示例代码

function test(){// 从工作表中获取 A2:E16 范围内的数据,并存入二维数组 arr// 假设每一行的第一列数据为销售日期,其余列为销售详情var arr = Range("a2:e16").Value();// 利用 map 将数组中每一行的第一个元素(日期)提取出来,// 然后用 Set 去除重复的日期,最后利用扩展操作符转换为数组// DateArr 的类型为 Array<any>,其中元素为日期字符串或数值,例如 ["2023-01-01", "2023-01-02", ...]var DateArr = [...new Set(arr.map(ar => ar[0]))];// 对于每个唯一日期,在原始数组中查找第一条符合该日期的记录// arr.find 遍历每一行,找到符合条件的记录(第一条出现的记录)// NewArr 类型为 Array<any[]>,每个元素都是一行记录var NewArr = DateArr.map(d => arr.find(ar => ar[0] == d));// 将结果数据写入工作表,从 G2 单元格开始,写入的数据区域大小为 NewArr 的行数和列数Range("g2").Resize(NewArr.length, NewArr[0].length).Value2 = NewArr;// 调试输出,打印唯一日期数组和结果数据,用于验证数据正确性Console.log("唯一日期列表:", DateArr);Console.log("唯一日期对应的记录:", NewArr);
}

详细解析

  • 函数定义

    • 函数名称test
    • 输入:无参数
    • 输出:无返回值,通过在 Excel 中写入数据实现结果呈现
  • 变量与数据结构解析

    • arr:二维数组,包含从 Excel 单元格范围 A2:E16 获取的所有数据,每个元素为一行数据。
      • 示例格式[ [日期, 数值1, 数值2, ...], [...], ... ]
    • DateArr:由 arr.map 提取第一列(日期)后,用 Set 去重生成的唯一日期数组。
      • 示例结果["2023-01-01", "2023-01-02", "2023-01-03"]
    • NewArr:利用 DateArr.map 遍历每个唯一日期,从原数组中查找该日期对应的第一条记录。
      • 示例格式[ [唯一日期1, 数值, 数值, ...], [唯一日期2, 数值, 数值, ...] ]
  • 算法核心

    • 利用 Set 对象实现了数据去重,保证了提取的日期列表中不存在重复值。
    • 使用 Array.prototype.find 方法确保每个日期只提取第一条记录,符合“每天仅一笔记录”的需求。
  • 数据输出操作

    • 通过 Range("g2").Resize(...) 方法将结果写回工作表,便于进一步的数据展示和分析。
    • 此处涉及 Excel 数据区间的动态调整操作,保证了写入区域与数据量匹配。

案例说明

假设你有一个销售记录表,其中 A 列为日期,B~E 列为销售数据。如果表中存在多个相同日期的记录,此代码将提取出每个日期仅保留第一笔记录。

例如,假设 Excel 数据如下(以表格形式描述):

行号日期销售额产品ID区域备注
22023-05-01100P001华东首笔订单
32023-05-01200P002华东重复订单
42023-05-02150P003华南首笔订单
52023-05-03180P004华北首笔订单
62023-05-02220P005华南重复订单

运行此代码后,从 G2 开始输出的结果将为:

行号日期销售额产品ID区域备注
22023-05-01100P001华东首笔订单
32023-05-02150P003华南首笔订单
42023-05-03180P004华北首笔订单

这种方法能够有效过滤重复的日期记录,确保数据的唯一性和清晰度。


6-3 集合成员添加与删除

在这一节中,我们介绍如何使用 Set 对象对集合的成员进行添加、删除、以及清空操作,这在数据处理过程中非常常见。以下示例展示了如何逐步对集合进行操作,并利用注释说明每一行代码的目的。

示例代码

function test1(){// 1. 创建一个空集合 s,类型为 Set<any>var s = new Set();// 2. 使用 add() 方法添加成员 "a" 到集合//    s 的内容由 {} 变为 { "a" }s.add("a");// 3. 添加数字 100 到集合//    目前 s 中包含两个元素:{ "a", 100 }s.add(100);// 4. 添加数字 200 到集合//    现在 s 中的元素为:{ "a", 100, 200 }s.add(200);// 5. 使用 delete() 方法删除集合中值为 "a" 的成员//    执行后 s 将只保留 { 100, 200 }s.delete("a");// 6. 调用 clear() 方法清空集合中所有的成员//    执行后 s 为一个空集合 {}s.clear();// 调试输出:打印集合当前大小,期望输出 0Console.log("集合 s 的当前大小:", s.size);
}

代码解析

  • 函数定义

    • 名称test1
    • 输入:无参数
    • 输出:无返回值,最终通过调试信息展示操作结果
  • 每一行代码说明

    1. 创建空集合 s,用于存储任意类型数据。
    2. s.add("a") 将字符串 "a" 添加到集合中。
    3. s.add(100) 向集合中添加数字 100
    4. s.add(200) 向集合中添加数字 200
    5. s.delete("a") 从集合中删除字符串 "a"
    6. s.clear() 清空整个集合,删除所有成员。

直观示意(Excel 模拟表格)

下面以模拟表格方式展示各步骤后集合的内容。注意:这里的“集合内容”仅为逻辑展示,并非 Excel 实际单元格数据,但我们采用了行标、列标以及网格边框的形式使其直观呈现。

操作步骤集合内容
初始状态{}
添加 “a”{“a”}
添加 100{“a”, 100}
添加 200{“a”, 100, 200}
删除 “a”{100, 200}
清空集合{}

6-4 集合成员添加与删除应用(不重复随机数)

本节介绍如何利用 Set 的不重复特性生成不重复的随机数。常见应用场景例如抽奖、随机分组或生成随机试卷题目时需要确保数字不重复。

示例代码

示例1:生成一定数量的不重复随机数,范围在 1 到 20。

function rnd1(){// 创建一个空集合 s,用于存储生成的随机数var s = new Set();// 循环直到集合 s 中的元素数量达到 10 个while (true){// 使用 WorksheetFunction.RandBetween(1, 20) 生成1至20间的随机数var num = WorksheetFunction.RandBetween(1, 20);// 将随机数添加到集合中,若重复则自动去重s.add(num);// 当集合大小达到10时跳出循环if (s.size == 10){ break; }}// 最终 s 包含10个唯一的随机数Console.log("生成的随机数集合:", [...s]);
}

示例2:自定义函数 rnd(counter, start, end),可以生成指定个数(counter)的不重复随机数,并返回数组。

function rnd(counter, start, end){// 确保请求的随机数数量不超过区间内可能的数字总数if (counter <= end - start + 1){// 初始化空集合 svar s = new Set();// 不断生成随机

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com