数组 迭代器方法

这些方法的参数都是函数,可以对数组中的每一个元素运用该函数,原数组不变。

1、不生成新数组 的迭代器方法

(1) forEach() :对数组中的每一项运行给定函数,没有返回值,它和使用for循环的结果相同

function square(num) {
console.log(num * num);
}
var nums = [1,2,3,4,5,6,7,8,9,10];
nums.forEach(square);

var data=[1,2,3];
data.forEach(function(item,index,array){
console.log(item*item);
console.log(array.concat(array));
})
//item 指代元素值,index 指代元素索引,array 指代数组本身,形参位置固定

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

          反之,有一个值是false就返回false(默认返回false)。
function isEven(num) {
return num % 2 == 0;
}
var nums = [2,3,4,6,8,10];
var even = nums.every(isEven); //every
console.log(even);//

//也可参照上面匿名函数的例子,给every接收的函数传参(item,index,array)

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

function isEven(num) {
return num % 2 == 0;
}

var nums = [1,3,10,];
var someEven = nums.some(isEven); //some
console.log(someEven);

//也可参照匿名函数的例子,给every函数传参(item,index,array)

2、生成新数组 的迭代器方法

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

function curve(grade) {
return grade += 5;
}
var grades = [77, 65, 81, 92, 83];

var newgrades = grades.map(curve); //map
console.log(newgrades);

var data=[1,2,3];
var result4=data.map(function(item,index,array){
return item*2;
})
console.log(result4);

(2) filter():传入一个返回值为布尔类型的函数。

和every()方法不同的是, 当对数组中的所有元素应用该函数,结果均为 true 时,该方法并不返回true,而是返回一个新数组,该数组包含应用该函数后结果为 true 的元素。

function isEven(num) {
return num % 2 == 0;
}

var nums = [];
for (var i = 0; i < 20; ++i) {
nums[i] = i+1;
}

var evens = nums.filter(isEven); //filter
console.log(evens);

累加方法

reduce和reduceRight:使用指定的函数对数组元素进行组合,生成一个值,接收两个参数。

var numbers = [1,2,23,34,5,6,78,98,900];
numbers.reduce(function(previousValue, currentValue, index,array){
return previousValue + currentValue ;
},initialValue);

详细解释:

– 参数一:要执行的函数,有返回值,函数内部处理的参数如下

previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue)) currentValue (数组中当前被处理的元素) index (当前元素在数组中的索引) array (调用 reduce 的数组) – 参数二:传递给函数的默认值,可忽略

– reduce从左向右操作,reduceRight表示从右向左操作

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) //有点像递归 //看了代码也不一定懂,那我们就多看几个代码

常规用法有哪些?

求累加:

var a = [1,2,23,34,5,6,78,98,900];
var n = a.reduce( function (x, y) { return x + y; } , 0);
//参数一匿名函数function,为要执行的函数
//参数二为0,函数的默认起始值,即第一次执行0将被赋值给previousValue;

求累积:

var a = [1,2,23,34,5,6,78,98,900];
var m = a.reduce(function (x, y) { return x*y; } ,1)

求数组最大值:

var a = [1,2,23,34,5,6,78,98,900];
var max = a.reduce(function (x, y) { return x>y?x:y; });

29933

全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
CrazyBucket:我今天下午也做梦在招聘会上面试一家小厂,给自己气笑了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务