ES2015数组扩展 - Array.from()

2023-11-10

Array.from方法用于把两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。

下面是一个类似数组的对象,Array.from将它转为真正的数组

let arrayLike = {"0":"a","1":"b","2":"c",length:3};

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a','b','c']

// ES6的写法
let arr2 = Array.from(arrayLike); // ['a','b','c']

实际应用中,常见的类似数组的对象是DOM操作返回的NodeList集合,以及函数内部的arguments对象,Array.from都可以把它们转为真正的数组。

// NodeList对象
let ps = document.querySelectorAll('p');
Array.from(ps).forEach(function(p){
  console.log(p);
});

// arguments对象
function foo(){
  var args = Array.from(arguments);
  // ...
}

上面的代码中,querySelectorAll方法返回的是一个类似数组的对象,只有讲这个对象转为真正的数组,才能使用forEach方法。

只要是部署了Iterator接口的数据结构,Array.from都能将其转为数组

Array.from('hello');
// ['h','e','l','l','o']

let nameSet = new Set(['a','b']);
Array.from(nameSet) // ['a','b']

上面的代码中,字符串和Set结构都具有Iterator接口,因此可以被Array.from转为真正的数组。

所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组

Array.from({length:3});
// [undefined,undefined,undefined]

对于还没有部署该方法的浏览器,可以用Array.prototype.slice方法替代

const toArray = (()=>Array.from ? Array.from : obj=>[].slice.call(obj))();

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,讲处理后的值放入返回的数组

Array.from(arrayLike, x=>x*x);
// 等同于
Array.from(arrayLike).map(x=>x*x);

Array.from([1,2,3], (x)=>x*x)
// [1,4,9]

Array.from()的另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能够处理各种Unicode字符,可以避免JavaScript将大于\uFFFF的Unicode字符,算作是两个字符的bug

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

ES2015数组扩展 - Array.from() 的相关文章

  • Maven 4、JDK配置

    当你的idea中有多个jdk的时候 就需要指定你编译和运行的jdk 在settings xml中配置
  • 使用命令把类打成jar包

    测试用类 public class Hello public static void main String args System out println hello world 一般的Jar包 生成class文件 在命令行中输入下面代码
  • windows桌面应用自动化测试

    1 AutoIt3 原理 使用spy抓应用的hwnd 根据hwnd获取窗口信息 模拟发送鼠标按键 移动窗口实现自动化操作 缺点 获取到的信息少 编程实现复杂 2 UIAutomation msdn介绍 Microsoft UI Automa
  • STM32 USB DFU功能

    STM32 USB DFU功能 工具的安装配置 CubeMX上配置 完善接口 工具使用 HEX固件转为DFU文件 更新固件 DFU特点 工程代码 DFU的全称为 DownLoad Firmware Update即固件升级 以下配置以STM3
  • Junit5单元测试

    配置 Maven配置 我用的spring版本是2 2 2 其实引入一个就行
  • 解读开源 Go HTTP 框架 Hertz

    前言 在参与 Hertz 框架的开发迭代过程中 对 Hertz 的主库也越来越熟悉 接下来的几篇文章我将分别解析 Hertz 的服务注册 服务发现和负载均衡拓展 最后会使用适配于 Hertz 的 etcd 拓展进行实战 欢迎大家关注 Her
  • DSP之TMS320F28335学习总结与笔记(二)————ADC模块

    F28335 ADC模块 ADC转换模块 A D转换器 ADC 将模拟量转换为数字量通常要经过四个步骤 采样 保持 量化和编码 采样 将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量 保持 将采样结果存储起来 直到下次采样 这个过程
  • 高精度斐波那契

    1 为何会有高精度斐波那契一说 0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987 17 1597 18 258
  • CentOS6/7 日常管理--启动服务及日志查看

    CentOS6 chkconfig chkconfig list显示开机启动服务列表 chkconfig level 3 服务名 on off chkconfig 服务名 on off chkconfig del 服务名 删除 关闭 服务
  • 程序员搜索引擎比较

    正如大家口中所说的一样 百度搜索引擎吃相太难看了 如果谷歌搜索还在的话 百度搜索的日子可能并不会太好过 其他搜索引擎 1 360搜索 比较少用甚至没有用过的搜索引擎 360的全家桶太恶心了 简直是流氓 所以很多时候360安全管家 杀毒什么的
  • 开源框架 WebFirst 一键生成项目,在线建表

    1 WebFirst框架描述 WebFirst 是果糖大数据团队开发的新一代 高性能 代码生成器 数据库设计工具 由 net core sqlsugar 开发 导入1000个表只要1 2秒 用法简单 功能强大 支持多种数据库 具体功能如下
  • Bundle Adjustment 光束平差法

    https www cnblogs com Jessica jie p 7739775 html 感觉这个链接讲的比较好理解 看slam的书完全一脸懵
  • linux启动redis失败,解决redis服务启动失败的问题

    最近学redis 就遇到了各种坑 在这里分享一下 我是将redis做成后台 安装 配置环境变量统统省略掉了 做成后台服务呢 首先 cd到redis的安装目录下 再cd到util 接着执行 install server sh 然后修改服务名称
  • windows批处理文件删除n天前的文件

    author skate time 2010 12 23 windows批处理文件删除n天前的文件 用批处理文件删除n天前的文件如果操作系统是 Windows Server 2003 那就好办了 因为它有一个forfiles命令能够查找满足
  • BI大数据名词术语

    大数据的出现带来了许多新的术语 但这些术语往往比较难以理解 因此 我们通过本文给出一个常用的大数据术语表 抛砖引玉 供大家深入了解 部分定义参考了相应的博客文章 A 聚合 Aggregation 搜索 合并 显示数据的过程 算法 Algor
  • Postman之全局变量、环境变量

    1 什么是环境变量 环境变量 postman可以自定义环境参数值 这样就不用每次请求都去输入某些值 直接引用设置的值 使我们的测试更方便 例如 通过变换环境变量来快速变换环境地址 可将本地 测试环境的IP添加至不同的环境变量 调用时使用 x
  • 'react-scripts' 不是内部或外部命令 、propTypes is not defined 解决办法

    在手动安装了React 提供的第三方库 prop types报错的 我的React 就报错运行不了了 报错如下 react scripts 不是内部或外部命令 也不是可运行的程序 或批处理文件 这是一个在学习React 踩的坑 百度了一下
  • webpack打包vue

    在Windows10系统下 自定义打包整个Vue文件夹项目的相关配置项涉及以下内容 安装Node js和npm Node js官网 https nodejs org en download npm是Node js的包管理工具 在Node j
  • JDK8 Date 日期常用使用方法

    JDBC日期的转换 最新JDBC映射将把数据库的日期类型和Java 8的新类型关联起来 SQL gt Java date gt LocalDate time gt LocalTime timestamp gt LocalDateTime L

随机推荐

  • X11相关参数设置

    X11相关参数设置 X11 环境变量 DISPLAY 用来设置将图形显示到何处 变量格式 Xlib connection to 0 0 refused by server 开关闭屏幕显示 连接实际屏幕 确认实际屏幕的name of disp
  • 模式识别和计算机应用(转载)

    导读 只是覆盖了很小的范围 但总结的不错 1 数学方面 1 矩阵的各种分解 比如 LU QR Cholesky SVD Polar 2 广义逆与子空间 3 最小二乘法 特别齐性方程Ax b的各种解法及其几何意义 4 凸分析与凸优化的基本知识
  • 8种专坑同事的 SQL 写法,性能降低100倍,你学会了吗?

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 14 分钟 来自 juejin cn post 6844903998974099470 1 LIMIT 语句 分页查询是最常用的场景之一 但也通常也是最容易出问题的地
  • R语言Logistic回归模型深度验证以及Nomogram绘制

    R语言Logistic回归模型深度验证以及Nomogram绘制 小易学统计 互联网医疗统计师 自立 爱家人 15 人 赞同了该文章 01 研究背景
  • openwrt解除软件包安装限制

    Openwrt解除验证限制 sed i s tdetect package t detect package g koolshare scripts ks tar install sh
  • 安卓开发笔记——关于java.lang.RuntimeException: Unable to start activity ComponentInfo{......}问题的解决方案

    笔者在实现一个消息上下轮播时 遇到APP闪退 将日志打印出来 Process com ghl intelligence PID 6557 java lang RuntimeException Unable to start activity
  • 公众号如何快速接入查题功能

    最近很多同学私信小睿 我不会编程 写代码 我怎么能做一个自己的查题公众号呢 既然这么多同学最近在问 那小睿今天就来告诉大家 调用量瞩目 首先你需要一个查题的接口 然后配置到公众号内就可以了 那么接口从哪儿来呢 当然是找小睿啦 小睿为了使大家
  • 内核自带的基于GPIO的LED驱动学习(二)

    2 分析平台驱动的probe函数 好 既然这个LED驱动使用的是平台驱动框架 当设备和驱动匹配上之后 就会执行指定的probe函数 那接下来的工作就转移到分析对应的probe函数了 为了直观 我把probe函数也粘贴上来 static in
  • 【计算机网络】湖科大微课堂笔记 p2-p3 因特网概述、三种交换方式

    视频 计算机网络已从通信基础设施发展成重要的信息服务基础设施 因特网概述 网络 互联网和因特网的概念 理解 因特网发展的三个阶段 了解 因特网的标准化工作 了解 因特网的组成 理解 网络 互联网和因特网的概念 理解 左图是网络 右图是互联网
  • 转:《C++ Templates》读书笔记

    有三种模板参数 形参 1 类型参数 这是使用得最多的 2 非类型参数 3 模板的模板参数 类型参数 类型参数是通过关键字typename或者class引入 关键字后面必须是一个简单的标识符 后面用逗号来隔开下一个参数声明 等号代表接下来的是
  • U盘病毒 hypertrm.exe 修复

    1 最近电脑中了这种病毒 没有直观的感觉 不会蓝屏 也不会有其他任何异样 恶心的是他在我每次插入U盘的时候会提示INF默认安装 我没有对病毒样本做分析 感觉他只是创建了系统钩子 导致我尽管杀掉了u盘里所有的病毒 再次插上一切还会重来 2 解
  • String转字节数组

    Java语言中字符串类型和字节数组类型相互之间的转换是经常发生的 网上的分析以及代码也比较多 本文将分析分析常规的byte 和String之间的转换 1 String转byte 就是调用String类的getBytes 方法 如果没有带参数
  • 企业微信中授权小程序

    授权的时候先判断当前小程序运行环境 使用企业微信专有接口wx getSystemInfo if res environment wxwork 企业微信环境 wx qy login 获取企业微信派发的临时登录凭证 success res gt
  • PCL 计算点云的主曲率

    目录 一 算法原理 1 算法源码 2 特别提醒 3 曲率显示 二 代码实现 三 结果展示 四 测试数据 一 算法原理 1 算法源码 template
  • 用消息队列实现AB进程随时通信,在共享内存中循环逆置打印字符串

    一 要求实现AB进程随时对话 A进程发送一句话给B进程 B进程接收后打印 B进程回复一句话给A进程 A进程接收后打印 随机重复1 2步骤 当收到quit后 要结束AB进程 A进程 include
  • Python 爬取高校历年分数线

    最近一周一直在帮家里小弟看高考志愿 所以更新的没那么频繁了 请大家见谅 在看各高校的往年分数时 忍不住手痒 想着能不能给它爬下来 哈哈 说干就干 1 流程分析 之前无意中在这个网站发现有各个高校的历年录取分数线 https gkcx eol
  • 绕过过滤的空白字符

  • R语言-用stringr包处理字符串

    1 字符数统计和字符翻译 1 1 nchar和length nchar这个函数简单 统计向量中每个元素的字符个数 注意这个函数和length函数的差别 nchar是向量元素的字符个数 而length是向量长度 向量元素的个数 x lt c
  • python如何将多个文件夹的PNG图片批量转换为jpg图片(无损转换)

    一般不需要后期处理分析的照片无需使用PNG格式 对于普通的风景人物的照片可以无损转换为jpg格式 这个过程只是将原图png格式中保存空白信息的多余通道去掉而已 并不会影响画质 而内存一般可以变为原来的四分之一 对于图片收藏爱好者来说 可以节
  • ES2015数组扩展 - Array.from()

    Array from方法用于把两类对象转为真正的数组 类似数组的对象 array like object 和可遍历 iterable 的对象 包括ES6新增的数据结构Set和Map 下面是一个类似数组的对象 Array from将它转为真正