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:数据类型[] 数组名;(一 ...
随机推荐
- 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务【转】
本文转载自:http://blog.csdn.net/luoshengyang/article/details/6578352 在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行 ...
- JavaWeb -- Session应用实例 -- 随机中文验证码 检验
注册页面 login.html <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html ...
- BZOJ 3890 [Usaco2015 Jan]Meeting Time:拓扑图dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3890 题意: 给你一个有向图,n个点(n <= 100),m条边. 且所有的边都是从 ...
- CommonJS、AMD与CMD
自从有了模块,我们可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套! 于是下面三个模块 ...
- Delphi - 数组和结构体
技术交流,DH讲解. 记得很早之前我就说过,数组和结构体在内存中其实一样的,他们都是连续分布的.例如: ? 1 2 3 4 TMyStruct = record A,B,C:Integer; en ...
- 分享知识-快乐自己:springboot之thymeleaf (1):简单的thymeleaf例子
之前搞springboot时,发现spring很推荐thymeleaf,所以看了看学了学,感觉不错,做个笔记先. 做个简单和例子,项目是springboot,所以引入themeleaf相关包 pom. ...
- Serblet 过滤器(Filter)
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 过滤器的作用: 1.身份验证过滤器 2.日志记录和审核过滤器 3.触发资源访问事件过滤器. 等等等... Ser ...
- Eclipse_常用技巧_01_自动添加类注释和方法注释
一.步骤 路径A=windows-->preference-->Java-->Code Style-->Code Templates-->Comments 自动添加注释一 ...
- list dict set comprehension 列表推导式 (字典推导式,集合推导式)
从一个list生成新的list [ word.upper() for word in 'hellO worlD!' ] 简单的语法,如果不用list comprehension, 则要用更长的代码. ...
- Java 处理批量数据提交
在Java web开发过程中,处理表单数据是很重要一部分,常见的是form post处理单条数据的,但也会遇到一次提交多条数据到服务器的,如下: