js array对象的迭代方法

所有方法都接受两个参数:(fn,ctx);
默认的函数里面ctx是window,现在可以进行指定。
1.forEach 该方法接受一个函数作为参数, 对数组中的每个元素
使用该函数 return 语句失效

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

2.every 该方法接受一个返回值为布尔类型的函数, 对数组中的每
个元素使用该函数。 如果对于所有的元素, 每一项均返回 true, 则该方法返回 true。 下面
每一项都满足条件 相当于数学上面的&&
是一个例子://可以理解为数学上与的关系。都满足才返回true。

function isEven(num) {
return num % 2 == 0;
} v
ar nums = [2,4,6,8,10];
var even = nums.every(isEven);
if (even) {
print("all numbers are even");
} e
lse {
print("not all numbers are even");
}

3.some 它相当于数学上的或,有一个满足则返回true否则返回false。 该方法也接受一个返回值为布尔类型的函数, 只要有一个元素使得该函数返回 true,
相当于每一个返回值的||的关系
该方法就返回 true。


function isEven(num) {
return num % 2 == 0;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var someEven = nums.some(isEven);
if (someEven) {
print("some numbers are even");
}
else {
print("no numbers are even");
}

4.reduce() 方法接受一个函数, 返回一个值。 该方法会从一个累加值开始, 不断对累加值和
由于第一次迭代时 传入的第一个第二个参数依次是数组里的0 1元素 ,可以手动传入第一个参数

a=[20,10,40];
a.reduce(function(v,m){
console.log(v,m);
return v+m
},30)
第一次是30 ,20

数组中的后续元素调用该函数, 直到数组中的最后一个元素, 最后返回得到的累加值。


function add(runningTotal, currentValue) {
return runningTotal + currentValue;
} v
ar nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
print(sum); // 显示 55


reduce() 方法也可以用来将数组中的元素连接成一个长的字符串:


function concat(accumulatedString, item) {
return accumulatedString + item;
}
var words = ["the ", "quick ","brown ", "fox "];
var sentence = words.reduce(concat);
print(sentence); // 显示 "the quick brown fox"


[img]http://dl2.iteye.com/upload/attachment/0122/4481/257e0906-f68a-3f2a-9000-28a1e0ed6f10.png[/img]
reduce的变形 它实质上是对数组里面每一个的值进行相加(乘)运算。
实际业务中会遇见需求:
比如

arr=[
{fruit:'香蕉',id:2},
{fruit:'草莓',id:3},
{fruit:'橙子',id:4}
]

需要将其中的fruit共同来组成一个以,分隔的字符串

a.reduce(function(prev,curr,ind){
return (ind===1?prev['fruit']: prev)+"," +curr["fruit"]
})

因为在第一次迭代时prev是第一个对象,以后的话,是前面相加的值,故需要进行区分
当然,可能比如下一次是对kind这个字段进行以上运算,所以需要把key提取出来。

function get_str(a,key='kind'){
a.reduce(function(prev,curr,ind){
return (ind===1?prev[key]: prev)+"," +curr[key]
})
}

这样的话基本上平时的需求都可以完成了
reduceRight() 方法, 和 reduce() 方法不同, 它是从右到左执行.
5.map().两个迭代器方法可以产生新数组: map() 和 filter()。 map() 和 forEach() 有点儿像, 对数组中的每个元素使用某个函数。 两者的区别是 map() 返回一个新的数组, 该数组的元素是对原有元素应用某个函数得到的结果。

function curve(grade) {
return grade += 5;
}
var grades = [77, 65, 81, 92, 83];
var newgrades = grades.map(curve);
print(newgrades); // 82, 70, 86, 97, 88

or

function first(word) {
return word[0];
} v
ar words = ["for","your","information"];
var acronym = words.map(first);
print(acronym.join("")); // 显示 "fyi"

6. filter方法,利用指定的函数确定是否在返回的数组中包含值为true的元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值