理解Array.prototype.fill和Array.from
之所以将这两个方法放在一起说,是因为经常写这样的代码: Array.from({length: 5}).fill(0),看起来很简洁,但是踩到坑之后才发现自己对这两个方法实在是不求甚解。
Array.from
这个静态方法可以将某些值转换成数组,值可以是一个字符串,一个set,一个map或者一个类数组对象,最终返回一个数组。例子如下:
Array.from('一二三四五六七')
// ["一", "二", "三", "四", "五", "六", "七"]
// 等效的es5是'一二三四五六七'.split('')
Array.from(new Set([1,2,1,2]))
// 等效[...new Set([1,2,1,2])] => [1,2]
// 用来数组去重
Array.from(new Map([[1, 2], [2, 4], [4, 8]])) // 接受一个map
// 接受一个类数组对象
Array.from(arguments)
Array.from(document.querySelectorAll('div'))
Array.from({1: 2,length:3}) // [undefined, 2, undefined]
接受类数组对象这里很有意思,比如Array.from({length:5})和new Array(5)有什么区别。这里不在多说,可以看这篇文章了解一下。
除了一个必须参数外,这个方法还接受两个可选参数,一个mapFn,一个this参数,看个例子来了解一下:
Array.from('一二三四五六七', week => `周${week}`)
// ["周一", "周二", "周三", "周四", "周五", "周六", "周七"]
Array.from('一二三四五六七', function(week){
return `周${week} ${this.time}`
}, {time: '下午3点'})
//["周一 下午3点", "周二 下午3点", ...]
Array.prototype.fill
Array.prototype.fill,顾名思义,是用来填充数组的。这个方法也可以接受3个参数,分别是fill的值,开始的index,结束的index(貌似Array的方法都有这么一个特点,要么自己接受的参数多,要么给callback传的参数多,所以不好完全掌握
理解Array.prototype.fill和Array.from的更多相关文章
- ES6中新添加的Array.prototype.fill
用法 array.fill(start=0, end=this.length) 示例 [1, 2, 3].fill(4) // [4, 4, 4] [1, 2, 3].fill(4, 1) // [1 ...
- Array.prototype.fill 填充值被复用的问题
考察如下示例代码: // 创建二维数组 const arr = Array(2).fill([]); // 操作第一个元素 arr[0].push(1); // 结果是操作了所有数组 console. ...
- Array.prototype.map()和Array.prototypefilter()
ES5 => 筛选功能 Array.prototypefilter(): 代码: var words = ['spray', 'limit', 'elite', 'exuberant', 'd ...
- Array,prototype.concat.apply与[].conat.apply.
一直都知道JS数组Array内置对象有一个concat方法,但是也没怎么研究过,今天偶然就看了看 concat是连接一个或多个数组 返回的是连接后数组的一个副本 var oldArr=[]; var ...
- Array.prototype
Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法. /* 如果JavaScript本身不提供 first() 方法, 添加一个返回 ...
- js 数组map用法 Array.prototype.map()
map 这里的map不是"地图"的意思,而是指"映射".[].map(); 基本用法跟forEach方法类似: array.map(callback,[ thi ...
- 解析Array.prototype.slice.call(arguments)
在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以 ...
- 【02】[].slice和Array.prototype.slice
[02][].slice和Array.prototype.slice 01,Array是一个构造函数.浏览器内置的特殊对象. 02,Array没有slice方法. 03,Array.prototy ...
- ES6--Array.prototype.fill 替换数组
Array.prototype.fill
随机推荐
- Swift 反射机制,命名空间
1. 知道 Swift 中有命名空间 - 在同一命名空间下,全局共享! - 第三方框架使用 Swift 如果直接拖拽到项目中,从属同一个命名空间,很有可能冲突! ...
- squid代理允许FTP访问设置
# TAG: acl # Defining an Access List ============================= #Default: # acl all src all # #Re ...
- 获取fastdfs所有文件
工作中,mysql中存储的图片链接信息和FastDFS实际存储的图片数量不一致,此时应该与mysql中有存储记录的图片保持一致,我们要在FastDFS服务器中删除哪些无用的图片.于是乎自己写了一个脚本 ...
- SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)
SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程 相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...
- Linux module 添加到bashrc 和临时ifort编译器 以及python2和3的配置
第一步vim ~/.bashrc按键盘的i然后source /home/export/online1/bjpara/para/modules/scripts/cn-module.sh最后:x! bas ...
- js使用锚点回到顶部
使用锚点链接是一种简单的返回顶部的功能实现.该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返回到该锚点的链接,用户点击该链接即可返回到该锚点所在的顶部位置 <body s ...
- js图片预加载、有序加载
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- 微信浏览器Ajax请求返回值走error
微信浏览器Ajax post请求是返回值走的error $.ajax({ type: "POST", url: "https://XXXX", cache: f ...
- 小米open-falcon监控系统接入手册
一.新项目接入 0.官方文档: https://book.open-falcon.org/zh_0_2/usage/getting-started.html 1.联系运维人员确定可以使用监控系统: ( ...
- hdu-1878(欧拉回路)
题目链接:传送门 思路:就是判断无向图的欧拉回路的两个条件:(1)连通性(2)点的度数是偶数 注意:两个条件一同时满足才行. #include<iostream> #include< ...