前端面试题 - 如何将 Set 集合转化为一个数组

2023-05-16

什么是 Set 集合:

Set 集合类似于一个数组,但是它要求里面是元素不可以有重复。

const set =  new Set(['welcome', 'you', '!', 'you']);
console.log(set);                      // Set { 'welcome', 'you', '!' }

可以看到,Set 的实例是一个对象,这个对象的内部结构很像一个数组,传递给 Set 构造函数的数组,其内部重复的元素最终只会保留一个。

 

将 Set 集合转化为一个数组的方法:

 

1. 使用 Array.from() 方法

let set = new Set([12, 45, 97, 9797, 564, 134, 45642, 12, 564])
console.log(set)             // Set { 12, 45, 97, 9797, 564, 134, 45642 }
console.log(Array.from(set)) // [ 12, 45, 97, 9797, 564, 134, 45642 ]

 

简单地介绍一下 Array.from() 这个函数:

 

Array.from() 方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。

那么什么是类数组对象呢?所谓类数组对象,要具备两个要求:

  • 最基本的要求就是具有 length 属性,
  • 其次就是属性名要是非负整数或者字符串类型的非负整数。

虽然它表现出了数组的一些性质,但是该对象并不是由 Array 构造函数所创建的。

Array.from(obj, mapFun, thisArg) 有三个参数:

  • obj:被转化为数组的对象;
  • mapFun:作用类似于数组的 map 方法,可以对每个元素进行处理,将处理后的值放入返回的数组;
  • thisArg:this关键字的指向(通常都不用它)。
var arr = [12, 45, 97, 9797, 564, 134, 45642]
var set = new Set(arr)
var resultArr = Array.from(set, function(item){ 
  return (item + 1);
})
console.log(resultArr)     // [ 13, 46, 98, 9798, 565, 135, 45643 ]

 

传递给 Array.length 的类数组对象属性名可以不连续,也不一定非要从小到大,其次还可以重复。

最终,Array.from() 会将这些属性按照从小到大的顺序存放在数组对应位置中,下标没有出现过的位置将被赋予 undefined,属性名重复时,后一个属性值会覆盖前一个属性值。

一定要牢记:length 一定要大于所定义的最大属性名,而不能仅仅等于属性个数,否则属性名超过 lenth-1 的属性值将不会被添加到数组中去。

var arrayLike = {
  3: 'tom', 
  1: '65',
  3: '男',
  "4": ['jane','john','Mary'],
  'length': 5
}
var arr = Array.from(arrayLike)
console.log(arr) // [ undefined, '65', undefined, '男', [ 'jane', 'john', 'Mary' ] ]

 

其次也可以传递一个字符串(可遍历对象,Set 实例对象也是一个可遍历对象)

var str = 'hello world!';
console.log(Array.from(str)) // ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

 

2. 使用三点运算符 " ... "

const set =  new Set(['HELLO', 'JS']);
console.log(set);         // Set { 'HELLO', 'JS' }
const array = [...set];
console.log(array);       // [ 'HELLO', 'JS' ]

 

简单的介绍一下三点运算符"..."

 

在 ES6 规范中三点运算符有两个用途

  1. 参数使用,
  2. 拓展运算符使用。

参数使用

  • 作为参数使用的三点运算符,也可称为剩余参数,就是将剩余的所有参数放至一个数组内;
  • 剩余参数传入的参数可不限数量;
  • 剩余参数只能出现在最末尾,否则报错。(当然以扩展运算的身份出现时另当别论)
(function foo(param1, param2, ...params){
  console.log(param1 + ", " + param2 + ", " + params + ", " + Object.prototype.toString.call(params));
  //a, b, 1,2,3,456, [object Array]
})("a", "b", 1, 2, 3, "456");


拓展运算符使用

  • 返回数组中的各项数组拆解

返回数组中的各项,作为扩展运算符身份使用时,可以放在中间

var a = [2, 3];
console.log(1, ...a, 4);      //1 2 3 4

返回字符串的每个字符:

var str = "abcde";
arr = [...str];            // 分解字符串,并放入数组
console.log(arr);          // ["a", "b", "c", "d", "e"]

 

3. 使用 forEach

var set = new Set();
set.add("Hello").add("World").add("!");
console.log(set);     // Set { 'Hello', 'World', '!' }

var Array = [];

set.forEach(function(item, index, arr) {
  Array.push(item);
});
console.log(Array);   // [ 'Hello', 'World', '!' ]

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端面试题 - 如何将 Set 集合转化为一个数组 的相关文章

  • SNMP错误记录:No more variables left in this MIB view (It is past the end of the MIB tree)

    MIB和OID对应关系查看命令 xff1a snmptranslate Tz m all SNMP测试 本地测试 xff1a snmpwalk v 2c c public 64 123 localhost 1 3 6 1 2 1 25 3
  • 一个Docker面试题目

    编写Dockerfile脚本编译镜像 xff0c 运行容器后实现对现有 mysql 数据库做备份 环境信息 xff1a mysql数据库地址192 168 0 10 端口 6600 用户 testuser 密码 123456 需要备份的数据
  • Windows程序设置自启动

    Windows程序设置自启动 在Windows系统中 有几种方法可以设置一个程序在系统启动时自动启动 将程序添加到开机启动文件夹 Win 43 R打开运行框 输入shell startup打开开机启动文件夹 然后将你想自动启动的程序快捷方式
  • Windows Server 程序设置自启动(用户不登录)

    Windows Server 程序设置自启动 xff08 用户不登录 xff09 在Windows Server中 想要在系统启动时自动启动一个程序 但不依赖用户登录 可以使用以下几种方法 将程序添加为服务 这是Windows Server
  • linux时间同步脚本

    linux时间同步脚本 span class token function bash span span class token comment bin bash span span class token comment 时间同步服务器
  • 华三网络设备查看命令

    华三网络设备查看命令 华三网络设备的配置和管理可以通过设备的管理地址进行 常用的页面有 状态监控 用于查看设备运行状态 CPU利用率 内存利用率 温度等信息接口配置 用于配置接口属性 如速率模式 DUPLEX模式 description等I
  • rsync 远程删除文件

    rsync 远程删除文件 rsync是一个强大的远程数据同步工具 它不仅可以实现远程文件复制 也可以实现远程文件删除 要使用rsync实现远程删除文件 可以使用如下命令 span class token function bash span
  • 华为openEuler 22.03 LTS系统的欢迎讯息

    华为欧拉系统的欢迎讯息 华为EulerOS系统中的欢迎讯息是通过 etc profile文件来定义和设置的 该文件会在用户登录后读取并执行 EulerOS的 etc profile文件中定义了prompt函数来设置PS1提示符 并通过PRO
  • bash的进程与欢迎讯息自定义

    在bash shell中 可以通过多种方式自定义欢迎讯息和提示符 主要有 修改 etc profile文件 该文件在用户登录后执行 定义了PROMPT COMMAND和PS1提示符 可以修改其内容实现自定义欢迎讯息和提示符 例如 修改为 s
  • 使用crontab命令同步时间

    crontab命令可以用于在Linux系统中定期同步时间 常用的时间同步方法有 1 使用ntpdate同步时间 可以添加如下crontab任务 5 usr sbin ntpdate time nist gov http xn 5time r
  • GitHub+ Docker Hub 拉取国外镜像

    一 背景 我们在拉取国外镜像 xff0c 例如在搭建 Kubernetes 的时候需要使用到来自于 Google xff1a gcr io google containers kube apiserver amd64 这样的镜像 xff0c
  • 如何熟悉weblogic

    要熟悉WebLogic 可以从以下几个方面入手 理解WebLogic的基本架构 WebLogic是Oracle的中间件产品 用于开发和部署企业级Java EE应用程序 它的基本架构由管理服务器 托管服务器和节点管理器组成 理解每个组件的作用
  • docker overlay2 是存放什么的?

    docker overlay2是Docker中的存储驱动之一 用于管理镜像和容器层的数据 它使用最小存储空间来存储像层这样的临时数据 overlay2本质上是多层存储驱动 它将镜像和容器层都视为独立的匿名临时文件系统 然后通过联合挂载将这些
  • Google浏览器下载地址

    官网下载 https www google cn chrome 旧版本下载地址 https www chromedownloads net chrome64win https www slimjet com chrome google ch
  • docker网卡的IP地址修改

    Docker容器启动后 默认会在主机上分配一个网卡 该网卡对应一个网络命名空间 并在这个网络命名空间下随机分配一个IP地址 如果想修改Docker容器的IP地址 有以下几种方法 修改Docker宿主机的Docker网络 可以在Docker主
  • SNMP连接失败

    SNMP连接失败常见的原因有以下几个 版本不匹配 SNMP有SNMPv1 SNMPv2c SNMPv3等版本 客户端和服务器版本必须匹配 否则会连接失败 需要确认客户端和服务器所支持的SNMP版本 选择一个双方都兼容的版本进行连接 社区名不
  • windows安装GO语言环境

    GO语言版本 Windows 平台和 Mac 平台推荐下载可执行文件版 xff0c Linux 平台下载压缩文件版 版本 xff1a 1 16 8 出现上面这个界面就说明已经安装好了 查看GO版本 可以打开终端窗口 xff0c 输入go v
  • 3par命令集

    3PAR是惠普公司的存储产品 它提供了基于CLI的管理终端来管理存储系统 主要的3PAR CLI命令有 show 显示系统信息 showsys 显示系统概况信息shownode 显示节点信息showport 显示端口信息showdisks
  • 华为欧拉系统RPM强制卸载libffi-devel

    查看欧拉系统有没有安装这个包 yum list span class token operator span span class token function grep span libffi devel 准备离线下载时 xff0c 发现
  • 最全Arrays.sort函数举例

    Arrays sort 的作用是对括号中的数组进行排序 xff0c 时间复杂度O xff08 n logn xff09 xff0c 方法返回值为void 是在原来数组的空间基础上进行升序排序 xff0c 因此不需要定义一个数组接收它 xff

随机推荐

  • 【无标题】驱动设计思想P9- linux驱动(韦东山)

    linux驱动 xff08 韦东山 xff09 驱动设计思想P9 linux 驱动 61 驱动框架 43 硬件操作 61 驱动框架 43 单片机 面向对象 字符设备驱动程序抽象出file operation结构体对硬件部分抽象为led op
  • Ubuntu16.04 安装ROS 过程中遇到的问题

    操作系统 xff1a Ubuntu16 04 ROS版本 xff1a Kinetic 纯入门 xff0c 安装过程错误百出 xff0c 几乎是一步一个报错 xff0c 每执行一个命令就要各种查找解决方法 xff0c 终于用一个下午加晚上的时
  • Github学习心得(3):项目的修改

    书接上回Github创建版本库 xff0c 我们已经成功地创建了一个版本库 xff0c 并且上传了readme txt文件 在实际项目中 xff0c 我们总是要对代码进行修改 xff0c 那么就需要及时地更新Github版本库中的文件 以本
  • 解决Keil全局搜索时无法跳转的问题

    检查一下自己的工程文件路径中是否有英文括号 xff0c 如果有则删掉
  • 阿木实验室的普罗米修斯仿真平台搭建的难点和坑点

    普罗米修斯仿真实验平台搭建的难点解决 0 我为什么要辛苦搭环境 xff1f 前一段时间阿木实验室提供了一个搭好环境的镜像 xff0c 凭阿木币购买 xff0c 是真的好用 xff0c 阿木币嘛 xff0c 签一签道就会有 关于这个镜像其实还
  • Visual Studio Code无法监视此大工作空间中的文件更改的解决办法

    Visual Studio Code无法监视此大工作空间中的文件更改 xff08 错误ENOSPC xff09 当您看到此通知时 xff0c 表明VS Code文件监视程序用尽了句柄 xff0c 因为工作空间很大并且包含许多文件 在调整平台
  • Ubuntu增加交换分区即swap方法

    用交换文件的方式添加交换分区 xff0c 如下 sudo su 进入管理员模式 xff0c 会提示输入密码 cd usr mkdir swap cd swap dd if 61 dev zero of 61 swapfile bs 61 1
  • 为什么px4源码里找不到main函数?——从hello sky理解px4的编程规范

    如果你刚自学了c 43 43 xff0c 准备开始看px4的源码 xff0c 但翻来覆去找了半天没有找到一个标准的main 究其原因 xff0c 在nuttx系统里 xff0c 程序入口不是main xff0c 所以找不到任何main 如果
  • matlab提取外接盒、围盒、凸包和骨架

    宁收宁马的费呢 xff01 老子自己做的 xff0c 免费提供该大家 xff0c 卖资料的垃圾 xff0c 能收几个钱 拍一幅含多个人体目标的图像 xff0c 利用外接盒 围盒和凸包对每个人体目标区域进行表达 xff0c 并提取其骨架 ma
  • QLearning算法实现(python)

    文章目录 环境要求QLearning算法简介算法实现预设值Q表定义行为环境反馈环境更新Q学习主循环 环境要求 开发环境 xff1a python3 需要导入的包 xff1a numpy pandas time QLearning算法简介 Q
  • HTTP工作原理

    文章目录 简介 HTTP与HTTPS端口区别HTTP请求的方法OPTIONSHEADGETPOSTPUTDELETETRACECONNECT注意 xff1a HTTP 请求 响应的步骤 简介 HTTP协议定义Web客户端如何从Web服务器请
  • pandas行和列的操作

    文章目录 Series创建查增 改删 DataFrame创建查增删 columns amp index的指定 在Pandas中 xff0c Series是一维容器 xff0c DataFrame表示一个数据表 DataFrame中的任一行
  • 安装MAVROS过程 catkin:未找到命令 的问题

    PX4官网安装教程 源码方式安装 1 第一步执行 xff0c 创建文件夹 xff1b 移到创建文件夹中 mkdir p catkin ws src cd catkin ws 2 执行 catkin init 出错如下图 解决方法 xff1a
  • 数据规范化处理

    常用的三种数据规范化处理方法 常用的数据规范化处理主要有Min max规范化 Z Score规范化和小数定标规范化 下面简要介绍下三种数据规范化方法 xff0c 并用python的机器学习库SciKit Learn来实现数据变化 Min m
  • matplotlab不能显示中文解决(windows)

    汉字字体 xff0c 优先使用楷体 xff0c 找不到则使用黑体 plt rcParams 39 font sans serif 39 61 39 Kaitt 39 39 SimHei 39 正常显示负号 plt rcParams 39 a
  • ORB与CCM-SLAM

    入口函数 mono euroc cc int main int argc char argv 图像序列的文件名字符串序列 vector lt string gt vstrImageFilenames 时间戳 vector lt double
  • 在国际期刊发表人工智能和机器人文章的诀窍(WILEY)

    该次学术讨论主要讲述了如何去写论文 如何投稿 并介绍了WILEY论文投稿工具 xff0c 该工具 提供了论文撰写 xff08 包括 xff1a 图表 摘要图的生成 xff09 投稿期刊会议分析及建议等 链接 xff1a https gcb
  • ROS下进行串口通讯

    文章目录 前言一 安装串口功能包二 串口接受程序三 查看串口号 前言 在使用工控机时 xff0c 经常需要和其他主控进行信息交流 xff0c 串口通讯作为使用最为广泛的形式 xff0c 因此 xff0c 了解如何在ros下进行串口的接发数据
  • ubuntu系统分区详细教程

    1 xff1a swap交换空间 xff0c 这个也就是虚拟内存的地方 xff0c 选择主分区和空间起始位置 如果你给Ubuntu系统分区容量足够的话 xff0c 最好是能给到你物理内存的2倍大小 xff0c 像我8GB内存 xff0c 就
  • 前端面试题 - 如何将 Set 集合转化为一个数组

    什么是 Set 集合 xff1a Set 集合类似于一个数组 xff0c 但是它要求里面是元素不可以有重复 const set 61 new Set 39 welcome 39 39 you 39 39 39 39 you 39 conso