4个必须知道的数组方法

1.过滤器filter

filter()方法创建一个新数组,返回所有通过所提供函数实现的测试的元素集合。

1
2
3
4
5
6
7
8
9
10
var arr = [
{"name":"apple", "count": 2},
{"name":"orange", "count": 5},
{"name":"pear", "count": 3},
{"name":"orange", "count": 16},
];
var newArr = arr.filter(function(item){
return item.name === "orange";
});
console.log(newArr)//[{"name":"orange", "count": 5},{"name":"orange", "count": 16}]

2.forEach / map

相同点:都是遍历数组对数组的每一项进行操作,不改变原数组

不同点:forEach无返回值,map返回值是一个数组,数组的每一项是遍历时函数的返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var arr = [1,2,3,4,5,6,7,8];
//******forEach
var B = arr.forEach(function(item,index){
item+=1
return item
});
console.log(arr) //[1,2,3,4,5,6,7,8]
console.log(B) //undefined
//******Map
var B = arr.forEach(function(item,index){
item+=1
return item
});
console.log(arr) //[1,2,3,4,5,6,7,8]
console.log(B) //[2,3,4,5,6,7,8,9]

3.reduce

reduce(callback,initialValue)拥有两个参数,回调函数initialValue。回调函数本身共有4个参数,prevnextindexarray。基本上常用的就是pre和next。

  • prev:如果没有传初始值,prev的初始值是数组的第一项,next的初始值是数组的第二项,如果传了初始值initialValue,那么prev的初始值就是initialValue,next的初始值是数组的第一项
  • 每次迭代都应该返回一个值,作为下次迭代的prev,next则顺延到数组的下一个
1
2
3
4
5
6
7
8
9
var arr = ["apple","orange","apple","orange","pear","orange"];

function getCount(){
return arr.reduce(function(prev,next){
prev[next] = (prev[next] + 1) || 1;
return prev;
},{});
}
console.log(getCount()); // {apple: 2, orange: 3, pear: 1}

4.find

find方法的callback为数组的每个索引执行一次功能,直到找到一个callback返回真值的值。如果找到这样的元素,find立即返回该元素的值。否则find返回undefined。通常我们只会用到callback的2个参数,(item,index)

1
2
3
4
5
6
7
8
9
var inventory = [
{name: 'cherries', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5},
];
var res = inventory.find(function(item,index){
return item.name === 'cherries';
})
console.log(res) //{name: "cherries", quantity: 2} 和filter类似,但是只找到符合条件的第一个