es6基础系列五--数组的拓展
Array.from()
用于将两类对象转为真正的数组,类似数组对象和可遍历对象(包括数据结构Set和Map)转化为数组
格式:Array.from(arrayLike[, mapFn[, thisArg]])
// 字符串
Array.from('foo'); // ["f", "o", "o"]
// Set结构,类似数组,是个集合,具有add,has,delete,clear等方法,后面详细说
var s = new Set(['foo', window]);
Array.from(s); // ["foo", window]
// Map结构,类似对象,具有size,get,set,has,delete,clear等方法,后面详细说
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m); // [[1, 2], [2, 4], [4, 8]]
// Array-like object (arguments)
function f() {
return Array.from(arguments);
}
f(1, 2, 3); // [1, 2, 3]
// 箭头函数操纵参数,箭头函数下一节详细说
Array.from([1, 2, 3], x => x + x);
// [2, 4, 6]
// 等同于
Array.from([1, 2, 3]).map(x => x + x)
// 等同于
Array.from([1,2,3]).map(function(x){
return x+x;
})
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
// 等同于
Array.from({length: 5}).map((v, i) => i)
Array.of()
用于将一组值,转换为数组
格式:Array.of(element0[, element1[, ...[, elementN]]])
Array.of(1); // [1]
Array.of(1, 2, 3); // [1, 2, 3]
Array.of(undefined); // [undefined]
这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。
Array() // []
Array(3) // [undefined, undefined, undefined]
Array(3, 4, 5) // [3, 4, 5]
如果考虑浏览器不支持Arrray.of方法,可以用下面代码实现
if (!Array.of) {
Array.of = function() {
return Array.prototype.slice.call(arguments);
};
}
find()和findIndex()
用于找出第一个符合条件的数组元素。
格式:arr.find(callback[, thisArg])
callback是回调函数,找到返回值为ture则返回该元素,否则返回undefined;
另外,findIndex()和find()类似,只是返回第一个符合条件的数组元素位置,都不符合则返回-1
[1, 5, 10, 15].find(function(value, index, arr) {
return value > 9;
}) // 10
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}, window) // 2
[2, 3, NaN, 5].find(function(value, index, arr){
return Object.is(NaN, value);
}) // NaN
[2, 3, NaN, 5].findIndex(function(value, index, arr){
return Object.is(NaN, value);
}) // 2
fill()
用于给定值填充数组
格式:arr.fill(value, start, end) start和end表示开始位置、结束位置属于可选项
可用于数组的初始化,注意:数组中已有的元素,会被替换
[1, 2, 3].fill(4); // [4, 4, 4]
[1, 2, 3].fill(4, 1); // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2); // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3]
Array(3).fill(4); // [4, 4, 4]
entries(),keys()和values()
格式:arr.entries(), arr.keys(), arr.values()
这三个方法都是用于遍历数组,其中,entries()是对键值对的遍历,keys()是对键名的遍历、values()是对键值的遍历
for(let i of ["a", "b"].keys()){
console.log(i);
}
// 0
// 1
for(let el of ["a", "b"].values()){
console.log(el);
}
// 浏览器暂不支持,理论上会输出a, b的
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
map()
用于提供该数组每个元素调用一次回调函数返回结果组成的新数组
格式:var new_array = arr.map(callback[, thisArg])
[1, 4, 9].map(Math.sqrt); // [1, 2, 3]
[1, 4, 9].map(function(num){
return num*2
}) // [2, 8, 18]
// es6中的 =>
[1, 4, 9].map(num => num*2); // [2, 8, 18]
// 数组里包含格式化对象
var kvArray = [{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30}];
var newArr = kvArray.map(function(obj){
var o = {};
o.key = obj.key;
o.value = obj.value*2
return o;
});
console.log(JSON.stringify(newArr)); // [{"key":1,"value":20},{"key":2,"value":40},{"key":3,"value":60}]
filter()
用于提供该数组每个元素通过回调函数过滤返回结果组成的新数组
格式:var newArray = arr.filter(callback[, thisArg])
注意:跟map()方法的区别,是通过过滤,结果为ture时的元素,不通过回调函数过滤的则忽略
[1, 4, 9].filter(num => num>2); // [4, 9]
[1, 4, 9].map(num => num>2); // [false, true, true]
reduce()
可以称之为迭代器或者累加器,用于把数组中单个元素调用一次回调元素返回结果迭代后再去调用下一个元素,最终返回一个值
格式:arr.reduce(callback, [initialValue]);callback的参数包括accumulator(回调返回的值或初始值)、currentValue(当前元素值)、currentIndex(当前元素索引,可选)、array(数组,可选); initialValue(初始值,可选)
[2, 4, 6].reduce(function(acc, cur, index, arr){
// console.log('累计值为'+acc+' 当前值为'+cur+' 当前索引为'+index);
// console.log(arr); //可以查看打印的相关参数
return acc + cur;
}); // 12 所有元素相加的值
// 有初始值的情况 =>写法
[2, 4, 6].reduce((acc, cur) => acc + cur, 10); // 22 初始值10+所有元素相加的值
// 还可以用于数组合并
[[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
return a.concat(b);
}); // [0, 1, 2, 3, 4, 5]
// 数组中元素的最大值
[1,2,5,6,3].reduce((acc,cur)=>{
return Math.max(acc, cur);
}); // 6
es6基础系列五--数组的拓展的更多相关文章
- es6基础系列四--字符串的拓展
1 for...of 字符串的遍历接口 for(let i of "abc"){ console.log(i); } // a // b // c 2 includes 是否包含某 ...
- 【C++自我精讲】基础系列五 隐式转换和显示转换
[C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...
- web基础系列(五)---https是如何实现安全通信的
https是如何实现安全通信的 如果有不正确的地方,还望指出! web基础系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 回顾 总结几个概念(具体描述可以看上一篇文章) 数字 ...
- go基础系列:数组
了解Python.Perl.JavaScript的人想必都知道它们的数组是动态的,可以随需求自动增大数组长度.但Go中的数组是固定长度的,数组一经声明,就无法扩大.缩减数组的长度.但Go中也有类似的动 ...
- ES6基础二(数组)
JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式:在普通的JSON最后多了一个length属性,就可以使用ES6的语法转变成数组. 当然了,不是所有的j ...
- es6基础系列三:解构赋值
解构就是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值(只能用于数组,对象或迭代器).如果解构不成功,则等于undefined,但不能赋值为undefined和null,因为undefi ...
- java 基础知识五 数组
java 基础知识五 数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...
- es6基础系列二:Number
es6中关于Number类型的变化,主要有以下几点 Number.isInteger(新增,判断是否为整数) Number.EPSILON(新增,判断是否可忽略的误差) Number.MAX_SAFE ...
- Java基础系列--04_数组
一维数组: (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1. 编号的专业叫法:索引 (3)定义格式 A:数据类型[] 数组名;(一 ...
随机推荐
- HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)
开始还觉得是贪心呢... 给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面 d=1:你只能把它放在 ...
- 介绍几款Web服务器性能压力测试工具
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般 ...
- centos虚拟机启用网卡
CentOS虚拟机安装成功后,默认开机未启用网关,通过修改配置文件,启用网卡 编辑系统配置文件,虚拟机完成后,系统安装了一个默认的网卡,即eth0,其配置文件的路径为/etc/sysconfig/ne ...
- Linux各个文件夹的主要作用 (源地址
(源地址blog.csdn.net/lonelysky/article/details/5374230,侵删) linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev ...
- DELPHI 动态 创建和释放 多个 EDIT 控件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- vue2.0使用Sortable.js实现的拖拽功能
简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...
- SpringBoot_03_依赖本地jar
一.方法一 1.说明 用Maven打到本地仓库,然后直接引入 2.参考资料 Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包中 3.执行maven ...
- AngularJS-指令command
directive: 匹配模式restrict:'AEMC'默认为A template templateUrl templateCache:把模板缓存起来,共多个指令使用 var myModule = ...
- 2018-06-07 RF test 1 :TX Power test
Test item: 1.Output power: 屏蔽网房-同轴线-频谱仪 The radio circuitry, generally referred to as the Device U ...
- PS 滤镜——波浪 wave
%%% Wave %%% 波浪效果 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Alg ...