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基础系列五--数组的拓展的更多相关文章

  1. es6基础系列四--字符串的拓展

    1 for...of 字符串的遍历接口 for(let i of "abc"){ console.log(i); } // a // b // c 2 includes 是否包含某 ...

  2. 【C++自我精讲】基础系列五 隐式转换和显示转换

    [C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...

  3. web基础系列(五)---https是如何实现安全通信的

    https是如何实现安全通信的 如果有不正确的地方,还望指出! web基础系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 回顾 总结几个概念(具体描述可以看上一篇文章) 数字 ...

  4. go基础系列:数组

    了解Python.Perl.JavaScript的人想必都知道它们的数组是动态的,可以随需求自动增大数组长度.但Go中的数组是固定长度的,数组一经声明,就无法扩大.缩减数组的长度.但Go中也有类似的动 ...

  5. ES6基础二(数组)

    JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式:在普通的JSON最后多了一个length属性,就可以使用ES6的语法转变成数组.     当然了,不是所有的j ...

  6. es6基础系列三:解构赋值

    解构就是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值(只能用于数组,对象或迭代器).如果解构不成功,则等于undefined,但不能赋值为undefined和null,因为undefi ...

  7. java 基础知识五 数组

    java  基础知识五  数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...

  8. es6基础系列二:Number

    es6中关于Number类型的变化,主要有以下几点 Number.isInteger(新增,判断是否为整数) Number.EPSILON(新增,判断是否可忽略的误差) Number.MAX_SAFE ...

  9. Java基础系列--04_数组

    一维数组: (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1. 编号的专业叫法:索引 (3)定义格式 A:数据类型[] 数组名;(一 ...

随机推荐

  1. UIView的概念与使用

    什么是UIView UIView可以称之为控件/视图 屏幕上所有能看到的东西都是UIView 按钮(UIButton).文本(UILabel)都是控件 控件都有一些共同的属性 -- 尺寸 -- 位置 ...

  2. msm8909+android5.1分区及烧录的镜像文件介绍【转】

    本文转载自: EMMC的分区及其保存的文件 Partition label filename 说明 PrimaryGPT gpt_main0.bin modem NON-HLOS.bin sbl1 s ...

  3. Spring Cloud之整合ZK作为注册中心

    Eureka已经闭源了,用zk可以替代之 Eureka 作为注册中心 Dubbo也是zk作为注册中心的 Zookeeper简介 Zookeeper是一个分布式协调工具,可以实现服务注册与发现.注册中心 ...

  4. BZOJ 1010 [HNOI2008]玩具装箱toy:斜率优化dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 有n条线段,长度分别为C[i]. 你需要将所有的线段分成若干组,每组中线段的 ...

  5. Linux课程---4、Linux目录结构及常用命令(目录结构)

    Linux课程---4.Linux目录结构及常用命令(目录结构) 一.总结 一句话总结: 家目录:./root:root用户的家目录 能执行的程序:./bin:所有用户都能执行的程序:./sbin:只 ...

  6. js 定义hash类

    // JavaScript Documentfunction HashTable(){    this._hash={};    this._count=0;            /**    *添 ...

  7. html5 tab横向滚动,无滚动条(transform:translate)

    html5 横向滚动,用到了 touchstart.touchmove.touchend 控制修改transform:translate属性;[手机端或者浏览器模拟手机模式才有效果] [转载请注明出处 ...

  8. linux命令学习笔记(8):cp 命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名, 在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果 ...

  9. Fiddler + 海马模拟器转包教程

    Fiddler + 海马模拟器转包教程 转包用来做什么不说了, 整理一下步骤  1.安装Fiddler 下载地址 http://pan.baidu.com/s/18me0A 2.设置Fiddler: ...

  10. H.264 码率设置

    一.什么是视频码率 视频码率是视频数据(包含视频色彩量.亮度量.像素量)每秒输出的位数.一般用的单位是kbps. 二.设置视频码率的必要性 在网络视频应用中,视频质量和网络带宽占用是相矛盾的.通常情况 ...