在ES6中新增了不少有利于快速开发的内容,好比咱们的箭头函数、解构赋值、拓展剩余运算符、class建立类、模版字符串......等等;javascript
同时数组和对象也新增了一些较为经常使用的方法,因为以前写的数组中的16种经常使用方法说过还有一些方法后续补充,但一直到如今尚未兑现承诺,今天小芝麻就先把欠下的还上😄java
接收一个函数做为累加器,数组中的每一个值(从左到右)开始缩减(是个数递减,不是值),最终计算为一个值。数组
(通常用于求和;计数,本次返回的结果会做为下一次的上一次进行计算。)app
callback
(必须):给数组中的每个元素依次执行传入的回调函数,不包括数组中被删除或从未被赋值的元素;
reduce
的数组。(可选)callback
函数时的第一个参数的值。
reduce
将报错。accumulator
和currentValue
的取值有两种状况:若是调用reduce()
时提供了initialValue
,accumulator
取值为initialValue
,currentValue
取数组中的第一个值;initialValue
,那么accumulator
取数组中的第一个值,currentValue
取数组中的第二个值。initialValue
,reduce
会从索引1
的地方开始执行 callback
方法,跳过第一个索引。若是提供initialValue
,从索引0
开始。函数累计处理的结果函数
不改变post
数组.reduce(callback(accumulator, currentValue, 【index, array】), 【initialValue】)测试
- 用【】表示能够省略
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
});
复制代码
callback 被调用四次,每次调用的参数和返回值以下表:ui
reduce
返回的值就是最后一次回调返回值
10
。
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
}, 10 );
复制代码
callback 被调用五次,每次调用的参数和返回值以下表: this
要累加对象数组中包含的值,必须提供初始值,以便各项正确经过你的函数。spa
var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
(accumulator, currentValue) => accumulator + currentValue.x
,initialValue
);
console.log(sum) // logs 6
复制代码
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
function(a, b) {
return a.concat(b);
},
[]
);
// flattened is [0, 1, 2, 3, 4, 5]
复制代码
关于reduce暂且说这些,更多内容可参考MDN,Array.prototype.reduce(),里面写的很详细,小芝麻也是参考的MDN
整理的😄
返回数组中条件成立项,把不成立的过滤掉,若是回调函数返回true,就把这一项放到新数组中返回
一个新的、由经过测试的元素组成的数组,若是没有任何数组元素经过测试,则返回空数组。
不改变原数组;
var newArray = 数组.filter(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能够省略
filter
遍历的元素范围在第一次调用 callback
以前就已经肯定了。filter
以后被添加到数组中的元素不会被 filter
遍历到。callback
的值是 filter
遍历到它们那一刻的值。下例使用 filter
建立了一个新数组,该数组的元素由原数组中值大于 10
的元素组成。
function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
复制代码
下例使用 filter() 根据搜索条件来过滤数组内容。
var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
/** * 基于搜索条件(查询)的数组筛选项 */
function filterItems(query) {
return fruits.filter(function(el) {
return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
})
}
console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']
复制代码
参考自:MDN,Array.prototype.filter()
对应的findIndex
方法,与find
用法都相同,只不过返回的第一次知足条件哪一项的索引,就不单独介绍啦😄
从左到右循环,直到找到知足条件的那一项,把这项返回;若是没有找到,那么返回undefined;
数组中第一个知足所提供测试函数的元素的值,不然返回 undefined。
不改变原数组
数组.find(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能够省略
callback
函数时会肯定元素的索引范围,所以在 find
方法开始执行以后添加到数组的新元素将不会被 callback
函数访问到。callback
函数访问到的元素的值被callback
函数所改变,那么当callback
函数访问到它时,它的值是所访问到的当前值。undefined
了。下面的例子是从一个数组中寻找质数(若是找不到质数则返回undefined
)
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) { return false; } } return element > 1; } console.log([4, 6, 8, 12].find(isPrime)); // undefined, 没有找到 console.log([4, 5, 8, 12].find(isPrime)); // 5 复制代码
参考自:MDN,Array.prototype.find()
在数组中只要有一项条件成立就返回true
,若是都不成立就返回false
不改变原数组
数组.some(callback(element, 【index, array】), 【thisArg】)
- 用【】表示能够省略
some()
遍历的元素的范围在第一次调用 callback
. 前就已经肯定了。some()
后被添加到数组中的值不会被 callback
访问到。callback
改变了,则其传递给 callback
的值是 some()
访问到它那一刻的值。用法基本与some
相同,与some
的区别就是:some
是找到一个符合的就返回true
,every
是找到一个不符合的就返回false
数组的每项都必须知足回调函数的条件(返回true),只要有一个不知足,就返回false
找到第一个返回false的值;就再也不向后继续查找;返回一个布尔值;若是全部的成员的回调都返回true,这个结果就是true
按照一个可指定的深度递归遍历数组,并将全部元素与遍历到的子数组中的元素合并为一个新数组返回。
一个包含数组与子数组中全部元素的新数组。
不改变原数组
var newArray = 数组.flat([depth])
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// =>[1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// =>[1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// =>[1, 2, 3, 4, 5, 6]
复制代码
Infinity
,可展开任意深度的嵌套数组//使用 Infinity,可展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
复制代码
flat()
方法会移除数组中的空项:var arr4 = [1, 2, , 4, 5];
arr4.flat();
// => [1, 2, 4, 5]
复制代码
参考自:MDN
数组的方法补充就到这里了,还有一些不是很经常使用的方法,没有在这里一一例举啦~~