vue根据选择的对象替换数组对象中相同的属性对象,不存在时则在数组中新增一个对象
遇见了一个比较有意思的问题 :选择的对象替换数组对象中相同的对象,不存在时则在数组中新增一个对象。
开始时把问题想得太简单了 准备用map()或 foreach()加上判断条件去替换或新增,结果就是 数组中不存在相同属性值的对象时,会根据数组的长度循环添加相同的对象。
百度发现别人是这样做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
export const formateArrObjData = (initialArr, obj, pro) => { if (!(initialArr instanceof Array)) { return '请传入正确格式的数组' } if (!(obj instanceof Object)) { return '请传入正确格式的对象' } if (!pro) { return '请传入正确格式的属性名' }
let index = initialArr.findIndex((val) => val[pro] === obj[pro]) if (initialArr.findIndex((val) => val[pro] === obj[pro]) !== -1) { tempArr.splice(index, 1, obj); } else { tempArr.push(obj); } return tempArr }
使用:this.tableArr = formateArrObjData(this.tableArr, tempObj, tempId)
|
当然我是个杠精,于是乎自己写了个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| this.arr = [{name='a',value='1'},{name='b',value='2'}]
this.clickOn({name='a',value='2'})
clickOn(obj){ if (this.arr.length>0){ let isAdd = this.arr.find(item => { if (item.name == obj.name){ this.$set(item, 'value', obj.val) return true } }) if (typeof(isAdd) == "undefined"){ this.arr.push(obj); } }
|
暂时看来还能用,不知道两个比较起来有没有什么性能上的差异,大家就选择性的用吧!如果有问题欢迎留言…