您的位置:首页 > Web前端 > JavaScript

javascript中几个很重要的数组方法

2017-02-23 17:22 281 查看


今天看了《学习javascript数据结构与算法》中,发现又扫了一些知识盲点。

以前我总以为every总会遍历数组中的所有元素,今天看了书以后才发现自己一直处于自我意淫的状态中。真是“玉不琢不成器,人不学不知道”。趁着现在有时间,记下来加深一下印象和理解:

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

fileter:对数组的每一项运行给定函数,返回该函数会返回true的项组成的数组。

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

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

some:对数组的每一项运行给定函数,如果任意一项返回true,则返回true。

照着概念来解读:

1.every

"如果该项函数对每一项都返回true,则返回true"。

之前我以为不管函数最终的结果是返回false还是true,它都会遍历整个数组。其实这是个很大的误解!它一旦碰到返回false的项,就停止遍历了。如:

var arr=[1,2,"a",3,4];

arr.every(function(item){

console.log(item);

return number.isInteger(item);

});

//chrome控制台结果:

1,2,a,false

说明了数组只是遍历到了“a”就停止了。因为我们用一个number.isInteger来判断传入的项是不是整数,因为字符串"a"不满足要求。所以到a就停止了数组的遍历。

这里要注意的一点是,无论运行的函数的返回值是什么,最终都会被转成Boolean值。而只要是true就会遍历下一项,直到遍历完整个数组;只要碰到false,就会停止遍历。例如:

var arr1 = [1,2,"a",3,4];

arr1.every(function(item){

console.log(item);

return true;

});

//chrome控制台结果:

1,2,a,3,4,true

var arr2 = [1,2,"a",3,4];

arr2.every(function(item){

console.log(item);

return false;

});

//chrome控制台结果:

1,false

注意:如果运行的函数不写返回值,则默认返回undefined,也就是false。

some方法:方式跟every方法差不多,只不过跟every是相反的。只要是返回true。就停止遍历。

map方法:“返回每次函数调用的的结果组成的数组”。也就是说,会遍历整个数组,然后将每次运行的返回值组成一个数组作为map方法最终的返回结果。例如:

var arr2 = [1,2,"a",3,4];

arr2.map(function(item){

return item;

});

//chrome控制台结果:

[1,2,"a",3,4]

var arr2 = [1,2,"a",3,4];

arr2.map(function(item){

return true;

});

//chrome控制台结果:

[true,true,true,true]

var arr2 = [1,2,"a",3,4];

arr2.map(function(item){

});

//chrome控制台结果:

[undefined,undefined,undefined,undefined]

forEach方法会完全遍历整个数组,而且没有返回值,也不回被 break等关键字终止。

filter方法就是将满足返回true的每一项收集成一个数组,并最终返回:

var arr1 = [1,2,"a",3,4];

arr1.filter(function(item){

return Number.isInteger(item);

});

//chrome控制台结果:

[1,2,3,4]

var arr1 = [1,2,"a",3,4];

arr1.filter(function(item){

return true;

});

//chrome控制台结果:

[1,2,"a",3,4]

var arr1 = [1,2,"a",3,4];

arr1.filter(function(item){

return false

});

//chrome控制台结果:

[]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: