arr: [ { key: "01", value: "乐乐" }, { key: "02", value: "博博" }, { key: "03", value: "淘淘" }, { key: "04", value: "哈哈" }, { key: "01", value: "乐乐" }, { key: "03", value: "淘淘" } ],
/用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
let obj = {}; this.arr = this.arr.reduce(function(prev, item) { obj[item.key] ? "" : (obj[item.key] = 1 &&prev.push(item))
return prev
; }, []);
//这里来解释一哈,reduce接受2个参数,一个函数,一个初始值,函数是必须的,用来遍历每个数组的的元素,后面那个【】可以不给,不给的话他的初始值就是这个数组的第一个元素,给了的话就是给的那个初始值,
三元运算符来判断是否重复,如果item.key存在则不作处理,也不向数组push,如果不存在则push
说白了还是利用对象的属性的唯一性去重一样
这里其实还可以用其他的循环来去重复的对象
比如(核心思想还是利用对象的属性的唯一性)、
let obj={} let ll=[] this.arr.map((item)=>{ if(!obj[item.key]){ obj[item.key]=1 ll.push(item) } })
打印出效果一样都去重了,当然上面的代码不好看,用逼格高的三元运算符来搞不用if else
let obj={} let ll=[] this.arr.map((item)=>{ obj[item.key] ? '' : (obj[item.key]=1&&ll.push(item)) }) console.log(ll,'去重后');
//看上去是不是更reduce差不多啊,哈哈
foreach一样可以,只要是数组循环都可以 filter也可以的 把上面的map换了就行
filter,map不会改变原数组 foreach会改变原数组