【面试题】 ES6中将非数组转换为数组的三种方法

news2024/11/24 17:06:10

 

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

我们常常想使用数组的方法,比如forEachfilter,又或者some等等来处理非数组的数据类型,那么在这些场景下,我们就需要将非数组转换为数组,而在ES6新增了三种数组转换方法,分别为**Array.form()** ,Array.of() 与扩展运算符,三种转换方法各有不同的转换对象,下面我们来分别看看。

Array.from()

转换数组方法Array.from()可以将对象转化为真正的数组,对象包括了两种,分别是:类数组对象含有迭代器的对象

类数组对象转换实例

类数组对象的表现形式是以0,1数字作为键的一种对象形式,而使用Array.from()转换后,它的值将被转换为数组形式

let arrObj = {
  "0": "猪痞恶霸",
  "1": "fzf404",
  length:2
};
let arr = Array.from(arrObj);
console.log(arr); // ['猪痞恶霸', 'fzf404']

如上,我们定义了一个arrObj的类数组对象,通过Array.from()转换方法将其转换为数组得到['猪痞恶霸', 'fzf404']

可能读者看到这里想说:转换成数组有什么用途啊,不能光学语法是不是,那么下面来看类数组对象转换数组真正的实际应用。

类数组对象转换应用

在开发中,我们操作DOM会用到节点列表,通过document.querySelectorAll()获取,如下图,可以清晰得了解到,我们拿到的节点列表是类数组对象,所以无法直接使用数组的一些方法,比如forEach,又或者是filter等等。

所以需要使用Array.form()方法将其转换为真正的数组,再使用数组方法进行一些额外操作

含有迭代器对象转换实例

Array.form()还可以将含有迭代器的对象转换为真正的数组,比如字符串,map或者是set,下面来看看它的使用

let str = "猪痞恶霸"
let strArr = Array.from(str)
console.log(strArray) // [ '猪', '痞', '恶', '霸' ]

拿字符串举例,转换为数组后,每个元素对应着字符串每一个字符,我们之前经常为切割字符串而烦恼,需要去使用正则切割,现在只需要Array.from(str)一行代码来完成字符串的割离。

这里的应用我不再举例,转换数组应用的本质都是为了更好地使用数组的方法去操控处理数据,而Array.from还有第二个参数

Array.from()的第二个参数

第二个参数比较像数组的map方法,作为一个回调函数来处理转换后数据的每一个元素

let str = "猪痞恶霸"
let _str = Array.form(str, (item) => {
    return item+item
})
console.log(_str) // [ '猪猪', '痞痞', '恶恶', '霸霸' ]

上面的操作,我模拟了字符串的处理,常常可以使用正则处理字符串,当然这就可以联想到我们可以使用这种方法来处理用户输入的内容,也可以防御恶意输入的产生。

以上就是将类数组对象又或者是含有迭代器的对象转换成数组的Array.from()方法,下面我们来看第二种Array.of

Array.of()

Array.of()可以将一组值转换成数组,其实他的真正实际应用是初始化数组。

let arr = Array(1,2,3)
console.log(arr) // [ 1, 2, 3 ]

知道的人会说:不是有Array()吗,为何要多此一举使用Array.of()呢?

其实Array.of()的出现不是偶然,它弥补了Array()作为数组构造函数的不足

let arr = new Array(3)
console.log(arr) // [ <3 empty items> ]

如上,只传入3作为参数得到[ <3 empty items> ]也就是[,,,]的数组,而当我们传入3个及以上个数的参数后,其构造的数组与传入3个以内有所不同,也就是说由Array构造的数组不统一

javascript
复制代码
let arr = new Array(3, 2, 1);
console.log(arr); // [ 3, 2, 1 ]

这也就是为什么要使用Array.of()代替Array的原因

看完这两种使用数组直属方法转换数组后,我们来看看如何使用扩展运算符来转换数组

扩展运算符

可以通过使用扩展运算符将含有迭代器的对象转化为真正的数组,比如节点列表,或者类数组对象,所谓的节点列表常常在我们使用dom操作的时候获取dom列表再将其转化为数组,方便使用一些好用的数组方法。

let domlist = document.querySelectorAll('div');
let arr = [...domlist]

类数组对象必须含有迭代器才能使用这种方法转化,如果不含有则可以使用Array.from()来转化

let objArr = {
    '0':'hogskin',
    '1':'猪痞恶霸'
}
console.log([...objArr]) // objArr is not iterable

mapset也可以使用这种方法转换,当然生成器函数也可以,因为其返回的是一个遍历器对象,内含迭代器

最后

三种ES6转换数组的方法就说到这里了

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/574994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT、Java 8 文档、MySQL都说 JDBC 没必要 `Class.forName()`,结果报错了……

文章目录 回顾 Tomcat 部署 WAR 应用报错找不到数据库驱动的问题ChatGPT、Javadoc 和 MySQL 驱动都说没必要 Class.forName()实验创建一个最小复现问题的 Demo不调用 Class.forName("com.mysql.cj.jdbc.Driver")调用 Class.forName("com.mysql.cj.jdbc.Driver&q…

chatgpt赋能python:Python的输出功能及其应用

Python的输出功能及其应用 Python是一种高级编程语言&#xff0c;它具有动态类型的解释性能力&#xff0c;是一种简洁、易于学习和易于阅读的编程语言。Python拥有非常强大的输出功能&#xff0c;使得开发者可以以多种形式输出数据结果&#xff0c;这对于数据分析、数据处理和…

人工智能值不值得学习?人工智能就业方向及前景

人工智能值不值得学习? 一、人工智能值得学吗&#xff1f; 很多同学想要知道人工智能值得学吗&#xff1f;小编认为是值得的&#xff0c;具体原因有以下两点&#xff1a; 1、人工智能专业前景好&#xff0c;但人才紧缺 根据人工智能行业的专家预计&#xff0c;到2020年&am…

华为CE12808/S9700交换机istack/CSS堆叠主备倒换操作命令步骤

一、华为CE12808交换机&#xff0c;istack堆叠状态 1、设备型号&#xff1a; 交换机一&#xff1a; HUAWEI CE12808 交换机二&#xff1a; HUAWEI CE12808 2、istack堆叠主备倒换操作步骤&#xff1a; 2.1、设备当前配置保存并进行备份。 2.2、切换所用命令。 执行命令display…

红黑树的插入。

一&#xff0c;一颗红黑树满足的性质 ①每个结点或是红色&#xff0c;或是黑色。 ②根结点是黑色的。 ③叶结点&#xff08;虚构的外部节点NULL结点&#xff09;都是黑色的。 ④不存在两个相邻的红结点。 ⑤对每个结点&#xff0c;从该结点到任一结点的简单路径上&#xff0c;…

【JavaSE】Java基础语法(二十):多态

文章目录 1. 多态的概述2 .多态中的成员访问特点3. 多态的好处和弊端4. 多态中的转型5. 多态中转型存在的风险和解决方案 (应用)6. 多态的实用价值 1. 多态的概述 什么是多态 同一个对象&#xff0c;在不同时刻表现出来的不同形态 多态的前提 要有继承或实现关系要有方法的重写…

SQLite 数据库入门教程(GO)

文章目录 SQLite数据库入门教程一、SQLite 简介1、什么是 SQLite&#xff1f;2、为什么要用 SQLite&#xff1f; 二、SQLite 安装1、在 Windows 上安装 SQLite2、在 Linux 、Mac OS上安装 SQLite 三、SQLite 命令四、SQLite 使用1、SQLite 数据类型2、SQLite 语法3、SQLite 可视…

chatgpt赋能python:Python百分比怎么算?-从基础到逐层深入

Python百分比怎么算&#xff1f; - 从基础到逐层深入 Python是目前全球最流行的编程语言之一&#xff0c;由于其易学易用的特点&#xff0c;广泛地应用于数据处理、Web开发、自动化测试等不同领域。当我们需要对一些数据进行计算和分析时&#xff0c;经常需要对百分比进行计算…

Linux第二天

上传 scp -r 本地文件路劲 用户名目标主机地址&#xff1a;路径 下载&#xff1a;scp -r 用户名目标主机地址&#xff1a;路径 本地目录 ls -A /root //查看root文件下所有的隐藏文件 命令&#xff1a;ls 选项&#xff1a; -l&#xff1a;查看文件属性 -h&#xff1a;文…

【Python】继承与多态

知识目录 一、写在前面✨二、继承三、多态四、Account和FreeChecking类的实现五、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;希望我们一路走来能坚守初心&#xff01; 今天跟大家分享的文章是 Python中的继承与多态 &#xff0c;希望能帮…

在windows下安装linux和kali子系统

目录 安装子系统 报错解决官方方法 步骤 1 - 启用适用于 Linux 的 Windows 子系统 步骤 2 - 检查运行 WSL 2 的要求 步骤 3 - 启用虚拟机功能 步骤 4 - 下载 Linux 内核更新包 步骤 5 - 将 WSL 2 设置为默认版本 步骤 6 - 安装所选的 Linux 分发 排查安装问题 下载发行…

【JavaSE】Java基础语法(二十一):内部类

文章目录 1. 内部类的基本使用2. 成员内部类3. 局部内部类4. 匿名内部类5. 匿名内部类在开发中的使用&#xff08;应用&#xff09; 1. 内部类的基本使用 内部类概念 在一个类中定义一个类。举例&#xff1a;在一个类A的内部定义一个类B&#xff0c;类B就被称为内部类 内部类定…

YOLOv8目标检测实战:Android手机部署 (视频课程)

课程链接&#xff1a;https://edu.csdn.net/course/detail/38595 YOLOv8 目标检测基于先前 YOLO 版本的成功&#xff0c;引入了新功能和改进&#xff0c;进一步提升了性能和灵活性。 本课程在Windows上手把手演示YOLOv8&#xff08;YOLOv8n和YOLOv8s&#xff09;目标检测在An…

jvm 分析调优工具-学习笔记

jvm 分析调优工具 jps命令查看java进程pid jps 列出java进程名(不完整类名) 和pid jps -l 列出java进程名(完整类名) 和pid jmap命令查看java进程占用的jvm资源情况 jmap -histo pid 查看内存情况 jmap -heap pid 查看java程序的堆占用信息 jmap -dump 导出heap快照分析文件he…

22 VueComponent 响应式处理

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 测试用例如下, 一个简单的 按钮事件的触发 问题的调试 数据…

老macbook升级新版本(Big sur、Monterey)

老macbook升级新版本&#xff08;Big sur、Monterey&#xff09; 一、前期须知以及准备1.摘要2.设备3.升级方法3.前期准备 二、引导U盘的搭建1.下载安装程序2.U盘格式问题3.下载系统镜像并写入U盘 三、系统安装结束语 一、前期须知以及准备 1.摘要 对于老版本的macbook一系列…

代码随想录训练营Day53| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

目录 学习目标 学习内容 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 学习目标 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 学习内容 1143.最长公共子序列 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09;ht…

PS磨皮插件免费电脑版Portraiture4.03下载及使用教程

Portraiture是一款智能磨皮插件&#xff0c;为Photoshop和Lightroom添加一键磨皮美化功能&#xff0c;快速对照片中皮肤、头发、眉毛等部位进行美化&#xff0c;Portraiture 4用于人像图片润色&#xff0c;磨皮等&#xff0c;减少了人工选择图像区域的重复劳动。它能智能地对图…

chatgpt赋能python:如何在Python中输入字符

如何在Python中输入字符 Python是一种非常流行的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括Web开发、人工智能、数据分析、科学计算等。在Python中输入字符是一项基本的操作&#xff0c;本文将介绍常见的输入字符方式以及注意事项。 使用input()函数输入字…

[数据结构] AVL树的插入旋转 和 概念理解

文章目录 定义 && 性质定义性质 实现思路架构节点AVL树框架Insert&#xff08;插入&#xff09;左单旋右单旋左右双旋右左双旋 定义 && 性质 定义 二叉搜索树虽可以缩短查找的效率&#xff0c;但 如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c…