关于js数组的学习

昨天在做项目的时候,遇到一个这样的需求,简单说来就是:有两个数组,a和b,将a数组中和b数组中相同的对象元素删除,因为数组保存的是对象,两个数组之间的联系就在对象中userId,在遍历删除的时候,
1.    开始用了splice()方法,结果就是始终都删不完,原因是因为splice删除后返回新的数组,但是计数的i还是一开始的数组长度,所以当删除到一半+1的时候后面的就删除掉了。
2.     delete方法,delete删除后数组的长度不会发生变化,正开心,这样就不会删除不掉了啊,确实在a和b一样的时候能删除完,但是当数据不一致的时候,在第一次删除后再删第二批的时候,发现console打出了错误,对象没有userId这个属性,我了个擦,第一次用delete,不知道删除后长度不变且删除后的变成了undefined。。。。。
最后还是用了delete,遍历完后又一一把undefined筛选出来,感觉比较low,无奈自己想不到更好的了。。。


3.因为这么Low的做法,我去学习了一下,reduce,感觉用起来棒棒哒,介绍一下:
reduce()方法接收一个函数callbackfn达到累加的结果,数组中的每个值(从左到右)开始执行.z这个函数包含4个参数:
function reduceArr(preValue,curValue,index,array){}
(1)preValue是上一次执行后返回的值或者是初始值
(2)当前执行的值
(3)当前执行到的数组的下标
(4)当然就是循环的数组了啊
现在来实现一个数组累加的结果:
var arrVal = [1,2,3,4,5]
arr.reduce(function(pre, cur, index, arrVal) {
   return pre + cur   //10
})
再来看一种有初始值的情况,
arr.reduce(function(pre, cur, index, arrVal) {
   return pre + cur //18
},3)
看起来是不是比平时写的for循环之类的高大上?最主要的是不想重复的去写那些无用功啊
还有一个就是reduceRight用法和reduce没什么区别,reduceRight是从末尾开始累加。。。

猜你喜欢

转载自yszsz.iteye.com/blog/2283124
今日推荐