【ES6】数组的扩展(二)之Array.from()和Array.of()

2023-11-10

Array.from()

Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历(iterator)的对象(包括Map和Set)

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']

扩展运算符背后调用的是遍历器接口(Symbol.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([1,2,3],x => x*x)   // [1, 4, 9]
Array.from([1,2,3].map(x => x*x))   // [1, 4, 9]

下面的例子将数组中布尔值为false的成员转为0。

Array.from([1,,2,,3],(n) => n || 0)
// [1, 0, 2, 0, 3]

Array.from可以将各种值转为真正的数组,并且还提供map功能。

Array.from({length:2},() => 'jack')
// ["jack", "jack"]


Array.of()

Array.of方法用于将一组值,转换为数组。

Array.of(3,2,1)   // [3, 2, 1]
Array.of(3).length   // 1

这个方法的主要目的,是弥补数组构造函数Array()的不足。

Array()   // []
Array(3)   // [, , ,]
Array(3,2,1)   // [3, 2, 1]
上面代码中,Array方法没有参数,一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于2个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

Array.of方法可以用下面的代码模拟实现。

function ArrayOf(){
    return [].slice.call(arguments)
}


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

【ES6】数组的扩展(二)之Array.from()和Array.of() 的相关文章

  • JavaScript中的promise

    概述 promise 承诺 是异步编程的一种解决方案 可以替代传统的解决方案 回调函数和事件 ES6统一了用法 并原生提供了Promise对象 promise是异步编程的一种解决方案 什么时候我们会来处理异步事件呢 一种很常见的场景就应该是
  • Ant Design Pro从零到一(Mock使用)

    认识Mock 学到这里就算是开始踏入AntD的门 然后我们还得学习一下常用的一些操作 例如Mock 针对与Mock他大致就是用来模拟数据的 为什么会有它的出现呢 因为现在前后端开发基本是分离的 但是数据结构一般都会先定好 在日常开发中 为了
  • JS 利用 Set 对数组中对象进行去重

    JS中怎么对一个数组进行去重 相信很多人对这个问题都已经很熟悉了 最简便的方法就是使用 Set let arr 1 2 3 3 4 5 5 console log new Set arr 1 2 3 4 5 那么如何对数组中的对象进行去重呢
  • 对象常用的方法

    思维导图 对象中常用的方法 Object prototype 1 hasOwnProperty 方法会返回一个布尔值 指示对象自身属性中是否具有指定的属性 也就是 是否有指定的键 检测是否为私有属性 即使属性的值是 null 或 undef
  • APP内嵌h5页面在android低版本出现白屏问题(vue项目)

    前段时间在处理一个vue项目时 在vivo和华为的android5 0系统出现白屏 没有任何报错信息 之后特地买了两台真机进行测试 经过分段调试 一步步排查 最后发现是这段代码出错 到底什么问题 对比一下这段代码 很明显 参数默认值的问题
  • => js 中箭头函数使用总结

    箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x gt x x 相当于 function x return x x 箭头函数相当于 匿名函数 简化了函数的定义 语言的发展都是倾向于简洁 对人类友好的 减轻工作量的 就相当于我最钟
  • SyntaxError: Cannot use import statement outside a module

    SyntaxError Cannot use import statement outside a module 错误展示 问题 使用 vs code 调试js 代码 出现 SyntaxError Cannot use import sta
  • 【Javascript】数组拼接的两种方法

    数组拼接的两种方法 1 改变原数组 1 push 扩展运算法 1 不改变原数组 1 concat 2 扩展运算符 1 改变原数组 1 push 扩展运算法 利用push搭配扩展运算符的方法 arr2经过扩展运算符 由 3 4 5 变成3 4
  • 【面试题】说一下promise的理解

    一 什么是Promise ES6 异步编程的一种解决方案 比传统的方案 回调函数和事件 更加的合理和强大 大家都知道传统解决异步编程用的是回调函数套回调函数 简称回调地域 以前用JQuery的朋友应该是相当熟悉了 维护起来很难搞 回调地域
  • 【ES6】中var、let、const的区别

    一 块级作用域 ES5 中作用域有 全局作用域 函数作用域 ES6 中新增了块级作用域 块级作用域由 包括 if语句和for语句里面的 也属于块级作用域 var a 1 console log a 1 console log a 1 通过v
  • ES6知识点总结一:const、let、箭头函数

    1 ES6常量及变量的声明const let ES6 新增了let命令来声明变量 const用来声明常量 ES6新增的let和const拥有 块级作用域 ES5只有 全局作用域 和 函数作用域 const与var区别 var声明的变量可以重
  • ES6入门:let、const、 var区别及注意事项

    ES6入门 let const var区别及注意事项 一 let const 1 用来声明变量或声明常量 2 let 代替 var 声明变量 const 声明常量 为了那些一旦初始化就不希望重新赋值的情况设计的 3 var let声明的就是
  • Promise,async,await

    什么是Promise Promise 简单说就是一个容器 里面保存着某个未来才会结束的事件 通常是一个异步操作 的结果 从语法上说 promise是一个对象 从它可以获取异步操作的的最终状态 成功或失败 Promise是一个构造函数 对外提
  • ES6 method写法与TypeError: is not a constructor

    公司前端最近开始强推ESlint 很多文件需要逐步修改为符合ESlint规则的形式 结果遇到了一个神奇的问题 有一段类似这样的代码 let obj init function el 此处ESlint检查提示 Expect method sh
  • 【ES6】Set 和 Map 数据结构

    文章目录 前言 一 Set 1 用法详解 1 1 声明方式 1 2 遍历的四种方式 2 应用场景 2 1 数组去重 2 2 合并去重 2 3交集 2 4 差集 3 WeakSet 二 Map 1 用法详解 1 1 声明方式 1 2 遍历的四
  • Element ui中menu组件(el-menu/el-menu-item/el-submenu/template) 层级结构和用法

    此篇文章写下的时间是2020年 所以如今Element UI都更新了不知道多少版了 肯定会有些许变化 请勿完全照搬照抄 虽然可能这部分代码没什么大的变动 但还是要以官方文档为准 此文仅仅是借鉴 理解具体思路 然后再按照官方的例子来应用到自己
  • 如何写一个随机洗牌函数

    看到了很多人写得随机洗牌函数 但是感觉写得都不是太好 自己写了一个试试 基本要求 给定一定范围的数比如最大值最小值 min max 在这个之间进行随机洗牌 首先生成一个按min到最大的max的数组a 对数组进行循环 每次随机生成一个要取的下
  • Ant Design Pro从零到一(认识AntD)

    废话 在我们第一次接触AntD的时候 会遇到两个东西 一个是Ant Design 另一个是Ant Design Pro 他们的官网分别是 Ant Design 一套企业级 UI 设计语言和 React 组件库 Ant Design Pro
  • 【JavaScript】Set方法

    基本用法 ES6 提供了新的数据结构 Set 它类似于数组 但是成员的值都是唯一的 没有重复的值 Set 本身是一个构造函数 用来生成 Set 数据结构 const s new Set 2 3 5 4 5 2 2 forEach x gt
  • 【JavaScript】Set方法

    基本用法 ES6 提供了新的数据结构 Set 它类似于数组 但是成员的值都是唯一的 没有重复的值 Set 本身是一个构造函数 用来生成 Set 数据结构 const s new Set 2 3 5 4 5 2 2 forEach x gt

随机推荐

  • 移动端/帆软移动报表调用拨打电话

    HTML a标签的href 属性 tel 点击可以直接拨打电话 移动端 a href 13622178579 a 把某个单元格 形态赋值为 公式形态 a href style color 508ef9 a ps F1列存储电话号码
  • 自动化运维脚本语言shell练习(2)

    1 编写脚本for1 sh 使用for循环创建20账户 账户名前缀由用户从键盘输入 账户初始密码由用户输入 例如 test1 test2 test3 test10 2 编写脚本for2 sh 使用for循环 通过ping命令测试网段的主机连
  • 程序员,你今年读了几本书?

    调查显示 国人去年平均阅读 4 本书 程序员不应该只有 代码大全 4 23 世界读书日 GitChat 码农读书日 活动最后 1 天 用抄底的价格 抢你要的技术书 GitChat 特意筛选畅销度最高的品种 给予超大力度的优惠 深度学习入门
  • 如何关闭FileZilla Server开机自启

    FileZilla Server开机自启 有些软件开机自启 个人感觉是比较反感的 像流氓一样 如何关闭 选中此电脑 gt 右键单击 gt 点击管理 找到之后FileZilla Server FTP server之后右键点击属性 改成手动启动
  • 重t2加权是什么意思_王者荣耀中说的T0、T1,到底是啥意思?这下总算清楚了

    王者荣耀这款游戏可以说是相当火了 玩这款游戏的人应该有3亿左右了吧 而在这么庞大的人群中 也孕育出一种独特的语言 甚至有些老玩家也是没有听说过得 就比如今天我们要聊的 在王者荣耀中说的TO T1到底是什么意思呢 今天就给大家科普一下 TO英
  • testflight测试的直播软件,怎么使用 TestFlight 测试 App,注意些什么?

    原标题 怎么使用 TestFlight 测试 App 注意些什么 TF签名是什么 TF签名全称为TestFlight 实际为一个苹果官方研发的一款提供给ios开发者内测的一个工具类App 这款app可以在苹果商店搜索到 用户直接搜索打开Te
  • java 图形与动画_如何优化java动画编程中的显示效果

    展开全部 Java动画编62616964757a686964616fe4b893e5b19e31333264623234程有多种实现方法 但它们实现的基本原理是一样的 即在屏幕上画出一系列的帧来造成运动的感觉 Java多线程技术是Java动
  • C++——STL库中迭代器以及其代码实现简介

    文章目录 一 STL库中迭代器的简介 1 迭代器的定义 2 迭代器常用的运算 3 vector和deque提供的额外运算 4 迭代器的取值范围 二 STL库中迭代器的代码实现 总结 一 STL库中迭代器的简介 1 迭代器的定义 迭代器 it
  • ARouter初始化及跳转原理

    ARouter初始化及跳转原理 编译后生成文件 仓库类 class Warehouse Cache route and metas static Map
  • GZipStream归纳总结

    GZipStream 类 提供用于压缩和解压缩流的方法和属性 创建压缩流实例有个参数枚举CompressionMode 它有两个值分别是Compress DeCompress 表示压缩和解压 压缩和解压代码 实例化FileStream对象i
  • ZGC垃圾收集器-JVM(十五)

    上篇文章说了G1的特性 无分代 复制算法 大内存就可以用G1 可预测stw时间等特性 G1垃圾收集分类 JVM 十四 ZGC收集器 XX UseZGC ZGC Z Garbage Collector 是在jdk11新加入的低延迟垃圾收集器
  • Junit中测试插入等无返回值的操作要注意的问题

    问题一 到底插不插进数据库 由于测试数据有时比较随意 插入数据库会对数据库进行污染 我们在测试的时候通过控制事务 一般不提交至数据库 例如通过spring控制事务提交 默认让其回滚 TransactionConfiguration defa
  • 【C/C++内功心法】剖析预处理过程,详解其他预处理指令,提升C/C++内功

    文章目录 前言 一 undef 二 命令行定义 三 条件编译 四 文件包含 1 头文件被包含的方式 2 嵌套文件包含 总结 前言 大家好啊 我是不一样的烟火a 今天我将会为大家详细讲解其他的预处理指令 虽然本文章读完后不能让大家代码写得飞起
  • 分布式事务总结

    这次使用分布式事务框架过程中了学习了一些分布式事务知识 所以本文我们就来聊聊分布式事务那些事 首先我们先回顾下什么是事务 事务 什么是事务 这个作为后端开发 日常开发中只要与数据库有交互 肯定就会使用过事务 现在摘抄一段wiki的解释 解释
  • 直播项目vue-video-player 播放 rtmp流

    最近写的一个项目是跟直播相关的 那就必须涉及到播放器 我选择用的是vue video player 记录几个自己遇到的坑 第一个就是直播画面卡住的问题 我遇到的问题很奇怪 flash也打开了 画面也有了 但是就是一直卡住不动 这个问题卡了我
  • css行高包含哪些,详解CSS行高

    行高 即CSS中line height所描述的属性 它表示两行文字间基线之间的距离 不允许使用负值 在弄清行高之前 我们先来了解几个概念 顶线 中线 基线 底线 上图所示线条从上到下为 1 2 3 4 5 6 7 8 9 10 vertic
  • 修改dns服务器转发器,域服务器dns设置转发器

    域服务器dns设置转发器 内容精选 换一换 CCE支持通过dnsPolicy标记每个Pod配置不同的DNS策略 None 表示空的DNS设置 这种方式一般用于想要自定义DNS配置的场景 而且 往往需要和dnsConfig配合一起使用达到自定
  • 解决uniapp执行switchTab跳转成功之后不调用onLoad的方法

    目录 页面结构 遇到的问题 解决方案 页面结构 现有一个tab页面分为两个页签 一个下单页面 一个订单页面 onLoad 页签默认为下单 this current 0 获取商品列表 this getList 点击确认按钮提交订单之后 跳转到
  • node.js和vue.js

    链接 https www zhihu com question 33578075 answer 56951771 如果你去年注意过技术方面的新闻 我敢说你至少看到node js不下一两次 那么问题来了 node js是什么 有些人没准会告诉
  • 【ES6】数组的扩展(二)之Array.from()和Array.of()

    Array from Array from方法用于将两类对象转为真正的数组 类似数组的对象和可遍历 iterator 的对象 包括Map和Set let arrayLike 0 a 1 b 2 c length 3 ES5的写法 var a