ES6中将非数组转换为数组的三种方法

news2024/11/26 4:32:36

 

大厂面试题分享 面试题库

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

地址:前端面试题库  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构造的数组不统一

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转换数组的方法就说到这里了,欢迎掘友关注我的JS进阶专栏,我是猪痞恶霸,一个立志于学妹的前端带学生

 

大厂面试题分享 面试题库

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

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

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

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

相关文章

解决 CentOS 7 内核安全漏洞 CESA-2018:3651 报错

如果你的 CentOS 7 服务器在安全测试时出现 kernel (CESA-2018:3651) 报错&#xff0c;那么您的服务器存在内核安全漏洞&#xff0c;需要更新修补。本文将介绍如何解决这个问题。 查看当前内核版本 在进行内核更新之前&#xff0c;您需要先查看当前服务器所使用的内核版本。可…

本地部署 MiniGPT-4

本地部署 MiniGPT-4 1. 什么是 MiniGPT-42. Github 地址3. 安装 MiniGPT-44. 准备预训练的 MiniGPT-4 checkpoint5. 在本地启动演示其他 1&#xff0c;安装 CUDA Toolkit 11.8其他 2&#xff0c;安装 GCC 9 版本&#xff0c;并设置为默认GCC版本其他 3(成功)&#xff0c;重新安…

Shell脚本管道符常用搭配命令(我在人间贩卖黄昏,只为收集世间温柔去见你)

文章目录 1.sort2.uniq3.tr5.split6.paste7.eval 1.sort sort命令——以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 sort [选项] 文件名 cat file …

Java版企业电子采购招标系统源码

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

UNIAPP实战项目笔记65 获取当前用户购物车数据的前端和后端交互

UNIAPP实战项目笔记65 获取当前用户购物车数据的前端和后端交互 思路 构建数据库表 前端数据存入vuex中shop.js的list中 list自动同步到后端数据&#xff0c; 后端相应前端请求数据 实例截图 ##代码 前端代码首批cart.vue <template><view class"shop-cart&quo…

两种知识库软件:BookStack和DokuWiKi在Debian12中的安装

一、BookStack的安装 1. 架设 LNMP系统环境 Debian12、php8.2-fpm、 nginx 2. 下载bookstack源码 3. 按照官网说明进行手动安装。 注意1&#xff1a;composer命令的安装&#xff0c;针对php的命令 下载、更名、安装 wget https://getcomposer.org/installer mv installer…

AI文章创作助手有什么特点

在当今信息爆炸的时代&#xff0c;文章创作已成为各行业必备技能。然而&#xff0c;如何高效地创作出质量优异且独具创意的文章仍是一个艰巨的挑战。AI文章创作助手应势而生&#xff0c;利用领先的自然语言处理和知识图谱技术&#xff0c;拥有丰富的自动创作和辅助创作能力&…

江苏省国家密码管理局副局长刘书伦等一行莅临通付盾调研

5月10日下午&#xff0c;江苏省国家密码管理局副局长刘书伦&#xff0c;苏州市国家密码管理局局长李家全、副局长王安方&#xff0c;苏州工业园区管委会党政办副主任陆万良等一行莅临通付盾&#xff0c;就密码及安全相关工作进行调研指导&#xff0c;通付盾创始人、CEO汪德嘉博…

Java框架学习04(SpringBoot自动装配原理)

1、什么是 SpringBoot 自动装配&#xff1f; 2、SpringBoot 是如何实现自动装配的&#xff1f;如何实现按需加载&#xff1f; 3、如何实现一个 Starter&#xff1f; 前言 使用过 Spring 的小伙伴&#xff0c;一定有被 XML 配置统治的恐惧。即使 Spring 后面引入了基于注解的配…

【Apifox】token的使用方式和脚本示例

目录 一、手动登录获取token 二、全自动登录实现方式 期望效果 实现思路 公共脚本示例 前言&#xff0c;关于token的使用&#xff0c;仅做了简单的demo测试token效果。 一、手动登录获取token 顾名思义&#xff0c;因为只有登录之后才有token的信息&#xff0c;所以在调…

最近遇到的2个问题:cd换路径失败以及sqli抓包失败

问题1&#xff1a;用cd的时候&#xff0c;仅仅输出所打内容&#xff0c;但是跳转失败 解决方法&#xff1a;添加强制跳转参数 /d 原来是&#xff1a; 改完之后&#xff1a; 如果仅仅是盘符之间的切换&#xff0c;可以不使用cd命令直接跳转磁盘&#xff0c;就是直接输入…

洗地机怎么选?高性价比家用洗地机推荐

洗地机是一款高效、智能的清洁设备&#xff0c;可轻松去除地面污渍&#xff0c;免除了传统清洁方式的繁琐和费时。采用高科技材料和技术&#xff0c;可快速有效地将地面污物清除&#xff0c;保持环境卫生和清爽。但是面对市场上众多的洗地机品牌&#xff0c;许多家人们都不知道…

从接口测试到自动化测试:企业级接口自动化测试实践详解

从入门到精通&#xff01;企业级接口自动化测试实战&#xff0c;详细教学&#xff01;&#xff08;自学必备视频&#xff09; 摘要&#xff1a; 本文将使用Python中的requests库进行接口自动化测试&#xff0c;通过编写测试用例、封装请求方法等步骤&#xff0c;实现简单的接口…

Melis4.0[D1s]:9.测试cedar多媒体解码库,视频和lvgl混合显示

文章目录 1.测试audio_test命令播放mp31.1 finish命令中文件路径的写法&#xff08;测试&#xff09; 2.测试cedar_test 命令播放mp42.1 不清除logo图层&#xff0c;无法显示视频2.2 使用disp_layer_alpha_test命令清除logo图层&#xff0c;正常播放视频 3. lvgl设置3.1 ui图层…

Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

生产环境服务器规划如下 服务器类型网络环境cal.comnginx外网192.168.7.15:9200tomcat内网192.168.7.16:9200tomcat内网sdd.comnginx内网192.168.7.15:9100tomcat内网192.168.7.16:9100tomcat内网 192.168.7.15和192.168.7.16是做个负载均衡。目前的需求是用户访问外网的cal.…

SIEM工具保护云数据安全

规范对云中敏感数据的访问、跟踪已批准和未批准的应用程序的使用情况以及检测基础架构中影子 IT 应用程序的使用情况&#xff0c;将有助于防止针对云的内部和外部威胁。由于组织的云边界超出了传统的网络边界&#xff0c;因此实施严格的策略来保护敏感数据&#xff0c;并获得对…

宠物界的“富士康”IPO,福贝宠物冲刺上交所主板

随着社会经济的不断发展&#xff0c;人们生活水平的提高&#xff0c;宠物经济逐渐成为了一个备受关注的话题。无论是对于宠物爱好者还是宠物经济从业者&#xff0c;宠物经济的重要性都不容忽视。福贝宠物自然也是宠物经济下的产物。 福贝宠物在上交所主板IPO的申请获得受理。本…

开源单用户客服系统源码-上传附件功能-elementui 异步上传文件【唯一客服开发商】...

之前开源的单用户客服系统&#xff0c;上传附件成功后&#xff0c;还不能展示出文件形式&#xff0c;今天把上传展示出文件形式给开发完善一下。 我想要实现的效果是&#xff0c;展示出文件的名称和大小信息 后端返回一个带有文件信息的json结果&#xff0c;前端把该信息组织一…

打造中国的Web3.0基座,张平院士谈“构建元宇宙及支撑技术“

在近期举办的全球元宇宙大会开幕式上&#xff0c;中国工程院院士、北京邮电大学教授张平出席大会并发表了题为《构建元宇宙及支撑技术》的开场演讲。 演讲中&#xff0c;张平院士分析阐述了理想的元宇宙技术运行状态。他表示&#xff0c;元宇宙需要实现大规模用户持续在线、高…

【JS】1678- 重学 JavaScript API - Broadcast Channel API

当我们网页需要在不同的浏览器窗口之间共享数据时&#xff0c;可能需要使用 WebSocket 或 WebRTC 等技术。但是&#xff0c;这些技术会过于复杂。而浏览器自带的 Broadcast Channel API[1] 可以让我们轻松地在不同浏览器窗口之间共享数据&#xff0c;而无需使用复杂的技术。 本…