reduce
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
arr.reduce((pre, item)=>{
// pre 上一次的值
// item 当前项目
return xx // 这个返回值作为下一次的上一次的值
}, 0)
1.第一个参数: callback函数
执行数组中每个值 (如果没有提供 initialValue则第一个值除外
)的函数,包含四个参数:
accumulator
累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue
(见于下方)。
currentValue
数组中正在处理的元素。
index
可选
数组中正在处理的当前元素的索引。 如果提供了initialValue
,则起始索引号为0,否则从索引1起始。
array
可选
调用reduce()
的原数组
2. 第二个参数: initialValue
可选
作为第一次调用 callback
函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
如果调用reduce()
时提供了initialValue
,accumulator
取值为initialValue
,currentValue
取数组中的第一个值;如果没有提供 initialValue
,那么accumulator
取数组中的第一个值,currentValue
取数组中的第二个值。
3.用法用途
- 求和
//total 6
var total = [ 0, 1, 2, 3 ].reduce(
( acc, cur ) => acc + cur,
0
);
- 累加对象里面的值
//sum 6
let sum = [{x: 1}, {x:2}, {x:3}].reduce(
(accumulator, currentValue) => accumulator + currentValue.x
,0
);
- 二维数组变一维
//[0,1,2,3,4,5]
var newArr = [[0, 1], [2, 3], [4, 5]].reduce(
( acc, cur ) => acc.concat(cur),[]
);
- 计算数组中每个元素出现的次数
// countedNames is:{ 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
}
return allNames;
}, {});
filter
过滤=>不会对空数组进行检测,不会改变原始数组,返回的是一个新数组
delChecked() {
//利用过滤原则,让list数组中的值为checked未选中的
this.list = this.list.filter((item) => !item.checked);
},
forEach
循环数组,不做任何改变
// item 表示当前项目
// index 表示索引
arr.forEach((item, index)=>{
})
map
循环数组,生成一个新数组。新数组的每一项是由循环的每一项的返回值生成的,新数组的长度和原数组一致
// item 表示当前项目
// index 表示索引
arr.map((item, index)=>{
})
find
找到符合条件的第一项
findIndex
找到符合条件的索引。如果不存在返回-1
splice
替换,参数一 表示位置,参数二表示个数,后面的参数如果存在那么会进行在指定位置的填充
该方法向或者从数组中添加或者删除项目,返回被删除的项目(该方法会改变原数组)
slice(start,end)方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素
该方法,不会改变原数组,,而是返回一个子数组,如果想删除数组中的一段元素,应该使用Array.splice()方法。
扩展运算符(…)
三个点,会生成一个新的对象。常常用在对象的浅拷贝上
- 数组对象复制
//数组的复制
var arr1 = ['hello']
var arr2 =[...arr1]
arr2 // ['hello']
//对象的复制
var obj1 = {name:'chuichui'}
var obj2 ={...arr}
ob12 // {name:'chuichui'}
- 数组对象合并
//数组的合并
var arr1 = ['hello']
var arr2 =['chuichui']
var mergeArr = [...arr1,...arr2]
mergeArr // ['hello','chuichui']
// 对象分合并
var obj1 = {name:'chuichui'}
var obj2 = {height:176}
var mergeObj = {...obj1,...obj2}
mergeObj // {name: "chuichui", height: 176}
- 字符串转数组
var arr1 = [...'hello']
arr1 // ["h", "e", "l", "l", "o"]
- 函数传参
function f(x,y,z){}
var args = [1,2,3]
f(...args)
// 以前的方法
f.apply(null,args);