ES6 --- 数组方法

392 阅读2分钟

es6中操作数组的方法:forEach、 Map、 filter、 find、 every、 some、 reduce

1、forEach

let colors = ['red','yellow','blue']
colors.forEach(function(color) {
	//forEach的迭代器函数
	console.log(color)
})

//遍历数组的值,并计算总和
let  numbers =[1,2,3,4,5]
let sum = 0
numbers.forEach(function(mum){
	sum += num
})
console.log(sum)

//简写方式
function add(mum){
	sum += num
}
numbers.forEach(add)
console.log(sum)

1.1 、当数组中元素为值类型,forEach绝对不会改变数据;当数组中元素为引用类型时,则可以改变数据

var arr1 = [
   {name:'Jenny',age:16},
   {name:'Danny',age:17}
];
var arr2 = [1,2,3];

arr1.forEach(item => { 
  item.age = item.age + 1
    
});

//=> [{name:'Jenny',age:17},
   {name:'Danny',age:18}]

arr2.forEach(item => {
  item = item * 2}
)

// => [1,2,3]

1.2、不能链式调用

[1,2,3,4,5].forEach(
   item => console.log(item)
).filter(item => { 
   return item > 2 
})
// Uncaught TypeError: Cannot read property 'filter' of undefined

2、Map

可以返回一个新数组;map的迭代函数中,需要return,如果没有return,则默认返回undefined

let arr1 = [1,2,3]
let arr2 = []
arr2 = arr1.map((item, index) => {
	//map迭代函数
	return item * 2
})

3、filter

会创建一个新数组,新数组中的元素是筛选出来的符合条件的所有对象,即:返回的是数组

//场景:有一个对象数组A,获取数组中指定类型的对象放到B数组中
let products = [
	{name:'orange',type:'fruit'},
	{name:'apple',type:'fruit'},
	{name:'celery',type:'vegetable'},
	{name:'cucumber',type:'vegetable'}
]
let B = []
B = products.filter(function(product){
	//filter  迭代函数
	return product.type === 'vegetable'
})
console.log(B)

4、find

在判断中一旦某个元素符合func,立马跳出循环,返回当前符合条件的元素,不会继续判断后面的元素;不创建新数组,即:返回的不是数组

//场景:假定一个对象数据A,找到符合条件的对象
let products = [
	{name:'orange',type:'fruit'},
	{name:'apple',type:'fruit'},
	{name:'celery',type:'vegetable'},
	{name:'cucumber',type:'vegetable'}
]
let A =  []
A = products.find(function(product){
	return product.type === 'fruit'
})
console.log(A)//[{name:'orange',type:'fruit'}]

5、every

返回一个Boolean,判断每一个元素是否都符合func,如果有一个不符合,就会终止循环,返回false

let arr = [1,2,3]
arr.every((item,index) => {
    return item < 10;  //true
})

let arr1 = [1,2,3,30]
arr1.every((item,index) => {
    return item < 10;  //true
})

6、some

**返回一个Boolean,判断是否有元素符合func,如果有一个符合条件,就会终止循环,返回true。**

let arr1 = [1,2,3,30]
arr1.some((item,index) => {
    return item < 10;  //true
})

let arr22 = [10,20,30]
arr22.every((item,index) => {
    return item < 10;  //false
})

7、reduce

reduce()方法接收一个回调函数作为第一个参数,回调函数接受四个参数,分别是;

  • previousValue =>初始值或上一次回调函数叠加的值;

  • currentValue => 本次回调(循环)将要执行的值;

  • index=>“currentValue”的索引值;

  • arr => 数组本身; reduce()方法返回的是最后一次调用回调函数的返回值;

    let weight = [1,2,3] var sum = weight.reduce((a, w) => { return w + a},0)//6 //a:初始值或上一次回调函数叠加的值 //w:本次回调(循环)将要执行的值<weight中的元素> //末尾的0,为a的初始值