老师,这里prev.indexOf(next) == -1 && prev.push(next)没看懂。
// 数组去重
let arr = [12, 34, 34, 342, 345, 34, 123, 345, 45, 12]
let newArr = arr.reduce((prev, next) => {
// 判断数组中是否存在当前元素,如果不存在的话,再将其添加到数组中
prev.indexOf(next) == -1 && prev.push(next)
return prev
}, []) // 设置迭代初始值为一个空数组
// 原数组不会发生改变
console.log(arr) // [12, 34, 34, 342, 345, 34, 123, 345, 45, 12]
// 去除重复项的新数组
console.log(newArr) // [12, 34, 342, 345, 123, 45]
41
收起
正在回答
1回答
同学你好,reduce方法中prev是数组,next是数组当前元素。初始值prev是[],next值为12
逻辑与中,判断数组中是否有当前值,也就是[]中没有12,prev.indexOf(next) == -1返回值为true,继续执行,prev.push(next)将12放入[]中,然后prev的值为[12] 。
继续数组中下一个值,prev值为[12] ,next值为34,prev中没有34,所以将34放入数组中。
继续下一个值,prev值为[12,34],next值为34,prev中有34,prev.indexOf(next) == -1返回值为false,逻辑与中有false就会停止,所以不执行后面的push操作。
然后继续下一个值,以此类推,最后筛选出不重复的值。
自己再理解下,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星