前言:JavaScript数据的迭代方法如果可以被被我们灵活的使用,可以达到出其不意的效果!
ES5为数组定义了5个迭代的方法。
every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
每个方法都接收两个参数:
1、要在每一项上运行的函数
2、运行该函数的作用域对象–影响this的值(可选)。
运行的函数会接受三个参数:1)数组项的值 2)**该项在数组中的位置(下标)**3)数组对象本身。
var arrTemp = [1,2,3,4,5]
forEach ( )
对数组的每一项运行给定函数。该方法没有返回值 。用法其实和for循环一样
var resulte = arrTemp.forEach((item, index, array) => {
if(item){
...
}
});
some ( )和every ( )
every()和 some(),它们都用于查询数组中的项是否满足某个条件。 对 every()来说,传入的函数必须对每一项都返回 true,这个方法才返回 true;否则,它就返回 false。而 some()方法则是只要传入的函数对数组中的某一项返回 true,就会返回 true,理解时,可以借助逻辑与或的关系
var arrTemp = [1, 2, 3, 4;
var everyResult = arrTemp.every(function (item, index, array) {
return (item > 2); // 每一项都大于2才会返回true
});
alert(everyResult); // false
var someResult = arrTemp.some(function (item, index, array) {
return (item > 2); // 只要有一项大于2就会返回true
});
alert(someResult); // true
filter ( )—过滤
filter()函数,它利用指定的函数确定是否在返回的数组中包含某一项。例如,要 返回一个所有数值都大于 2的数组,可以使用以下代码。
var arrTemp = [1, 2, 3, 4];
var filterResult = arrTemp.filter(function (item, index, array) {
return (item > 2);
});
alert(filterResult); //[3,4]
再写一个其他的例子:
const totalUserList=[
{postId:'xxxxxxx',postName:'yyyyyyy'},
{postId:'ccccccc',postName:'ddddddd'},
{postId:'bbbbbbb',postName:'aaaaaaa'}
]
filterUserList(type) {
const list = totalUserList.filter((item) => {
return item.postId === type
});
// 返回的 list 中,都是postId和totalUserList中一样的数据
}
map ( )
map( )也返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果。 例如,可以给数组中的每一项乘以 2,然后返回这些乘积组成的数组,如下所示。
var arrTemp = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var mapResult = arrTemp.map(function (item, index, array) {
return item * 2;
});
alert(mapResult); //[2,4,6,8]
同样,map()也可以用作循环:
...
let list = data.Service.Body.companyBriefInfoList || [];
list = list.map((item) => {
return item.custName + '-' + item.custNo;
});
重点:文章 内容 摘自《JavaScript高级程序设计》