数组的5中迭代方法 filter()、map()、forEach()、every()、 some()
2017-05-10 15:19
756 查看
先来看个牛客网上的题目吧,
有的大牛是这样子做的的。
受到启发 这样子做的
其实呢原理 都是数组中的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。
还是举例子说明问题吧!
以上代码调用了every()和some(),传入的函数只要给定项大于2 就会返回true。
对于every()因为只有部分数组符合条件,所以它返回false
对于some()因为至少有一项是满足条件的 所以它返回true
通过调用filter()方法创建并返回了包含3, 4, 6, 4, 6, 7, 9的数组,因为传入的函数对它们的每一项都返回了true。
这个filter()方法对查询符合某些条件的所有数组项非常有用。
map()方法返回的数组包含给每个数乘以2之后的结果。
这个方法适合创建包含的项与另一个数组一一对应的数组
forEach() 只是对数组中的每一项运行传入的函数,这个方法没有返回值,本质上与使用for循环迭代数组一样。
在数组 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循环迭代数组一样。
相关文章推荐
- [置顶] JAVASCRIPT中数组的迭代方法:FOREACH、MAP、FILTER、REDUCE、EVERY、SOME各个说明
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- javascript中数组的迭代方法对比:forEach()、map()、reduce()、some()、every()、filter()图解
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- 数组的迭代方法(every、filter、forEach、map、some)
- JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- 重写数组迭代新方法every,filter,map,some,forEach
- 一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
- Array 的五种迭代方法 -----every() /filter() /forEach() /map() /some()
- Array 的五种迭代方法(every/filter/forEach/map/some)
- JS数组中every(),filter(),forEach(),map(),some()方法学习笔记!
- js中数组过滤、遍历、迭代every、some、filter、map、forEach、reduce、reduceRight
- js数组的迭代器方法(some、every、forEach、map、filter)
- 关于数组中迭代的方法:every(),fileter(),forEach(),map(),some()
- js数组的遍历方法filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()
- js数组的迭代器方法(some、every、forEach、map、filter)
- Js 数组方法:filter()、map()、some()、every()、forEach()、indexOf()、lastIndexOf()、
- JS数组方法总结shift()、unshift()、pop()、push()、concat()、splice()、filter()、map()、some()、every()、forEach()等方法
- js数组的迭代器方法(some、every、forEach、map、filter)