es6数组增加了forEach,map,filter,find,every,some,reduce等方法,它们都是使用了迭代器函数。
一、forEach
遍历循环数组的方法,简化了以前的for( var i = 0; i< arr.length; i++) 操作
var colors = ["red","blue","green"];
// ES5遍历数组方法
for(var i = 0; i < colors.length; i++){
console.log(colors[i]);
}
// ES6 forEach
colors.forEach(function(color){
console.log(color);
});
// forEach 箭头函数写法
colors.forEach(color => {
console.log(color);
});
二.map
1.可以用于复制数组的同时改变数组每一项的值,2.可以用于获取数组中固定的一些的内容。但注意一定要return。
var cars = [
{model:"Buick", price: "CHEAP"},
{model:"BMW", price: "expensice"}
]
var prices = cars.map(function(car) {
return car.price
})
console.log(prices)
三.filter
可以用于过滤出符合条件的数组
var arr = [
{name: "1", type: "a"},
{name: "2", type: "b"},
{name: "3", type: "b"},
{name: "4", type: "d"}
]
var arr2 = []
arr2 = arr.filter(function(item) {
return item.type === "b"
})
console.log(arr2); // [{name: "2", type: "b"},{name: "3", type: "b"}]
四.find
可以找到符合条件的某个值,并且break出来
var arr = [
{name: "1", type: "a"},
{name: "2", type: "b"},
{name: "3", type: "b"},
{name: "4", type: "d"}
]
arr2 = arr.find(function(item) {
return item.type = "b"
})
console.log(arr2); // [{name: "2", type: "b"}]
五.every和some
var arr = [
{value: 1, type: "a"},
{value: 2, type: "b"},
{value: 3, type: "b"},
{value: 4, type: "d"}
]
var everyBoolean = arr.every(function(item) {
return item.value > 3
})
console.log(everyBoolean); // false
var anyBoolean = arr.any(function(item) {
return item.value > 2
})
console.log(anyBoolean); // true
即判断数组是否完全符合(every)某个条件或是否有一些项符合某个条件(any)
六. reduce
类似于splice可以替代很多数组的增删方法一样,reduce是es6数组迭代器方法中的万金油。与其他几种方法不同的是,reduce方法在迭代器函数后面要加一个表示初始化值的参数。
/** 场景1
* 计算数组中所有值的总和
* 代替forEach
*/
var numbers = [10,20,30];
var sum = 0;
// es5
for(var i = 0; i < numbers.length; i++){
sum += numbers[i];
}
// console.log(sum);
// es6
var sumValue = numbers.reduce(function(sum2,number2){
console.log(sum2);
return sum2 + number2;
},100);
console.log(sumValue);
/** 场景2
* 将数组中对象的某个属性抽离到另外一个数组中
* 代替map
*/
var primaryColors = [
{color:"red"},
{color:"yellow"},
{color:"blue"}
];
var colors = primaryColors.reduce(function(previous,primaryColor){
previous.push(primaryColor.color);
return previous;
},[]);
console.log(colors);