您的位置:首页 > 其它

数组的5中迭代方法 filter()、map()、forEach()、every()、 some()

2017-05-10 15:19 756 查看
先来看个牛客网上的题目吧,

在数组 arr 中,查找值与 item 相等的元素出现的所有位置
输入例子:
findAllOccurrences('abcdefabc'.split(''), 'a').sort()

输出例子:
[0, 6]


有的大牛是这样子做的的。

function findAllOccurrences(arr, target) {

var temp = [];
arr.forEach(function(val,index){
val !== target ||  temp.push(index);
});
return temp;
}


受到启发 这样子做的

function findAllOccurrences(arr, target) {

var newArr =[];
arr.map(function(item,index){
return (item==target)&&(newArr.push(index));
});
return newArr;
}


其实呢原理 都是数组中的5中迭代方法。

好了废话少说,直奔主题吧。

数组中的迭代方法

ECMAScript5 为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域 对象—–影响this的值。传入这些方法中的函数会接收三个参数:数组项的值item、该项在数组中的位置index 和数组对象本身array。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。

以下是这5个迭代方法的作用,

every()对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true。

some()对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true。

filter()对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组。

map()对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

forEach()对数组中的每一项运行给定的函数,这个方法没有返回值。

这5个迭代方法中,最相似的是every()和 some(),它们都用于查询数组中的项是否满足某个条件。

对every()来说,传入的函数必须对每一项都返回true,这个方法才返回true;否则,它就返回false。

而some()方法则是只要传入的函数对数组中的某一项返回true,就会返回true。

还是举例子说明问题吧!

var arr =[1,2,3,4,6,2,4,6,7,9];
var everyResult = arr.every(function (item,index,array) {
return (item > 2);
});
console.log(everyResult); // false

var someResult = arr.some(function (item,index,array) {
return (item > 2);
});
console.log(someResult);// true


以上代码调用了every()和some(),传入的函数只要给定项大于2 就会返回true。

对于every()因为只有部分数组符合条件,所以它返回false

对于some()因为至少有一项是满足条件的 所以它返回true

var arr =[1,2,3,4,6,2,4,6,7,9];
var filterResult = arr.filter(function (item,index,array) {
return (item >2);
});
console.log(filterResult); //[3, 4, 6, 4, 6, 7, 9]


通过调用filter()方法创建并返回了包含3, 4, 6, 4, 6, 7, 9的数组,因为传入的函数对它们的每一项都返回了true。

这个filter()方法对查询符合某些条件的所有数组项非常有用。

var arr =[1,2,3,4,6,2,4,6,7,9];
var mapResult = arr.map(function (item,index,array) {
return item *2;
});
console.log(mapResult); //[2, 4, 6, 8, 12, 4, 8, 12, 14, 18]


map()方法返回的数组包含给每个数乘以2之后的结果。

这个方法适合创建包含的项与另一个数组一一对应的数组

var arr =[1,2,3,4,6,2,4,6,7,9];
arr.forEach(function (item,index,array) {
//执行某些操作,这个操作是我自己写着玩的
if(item == 2){
console.log(index);  // 1 5
}
});


forEach() 只是对数组中的每一项运行传入的函数,这个方法没有返回值,本质上与使用for循环迭代数组一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  迭代 filter map every some
相关文章推荐