欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于js数组的学习

程序员文章站 2022-05-13 11:02:00
...
昨天在做项目的时候,遇到一个这样的需求,简单说来就是:有两个数组,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是从末尾开始累加。。。

相关标签: JavaScript array