在小程序中,我们经常遇到需要修改某一个数组里面的某一个对象的值,平常我们是这样写:
var newdata={id:1,name:'小明'};
var list=this.data.list;//取出原有数据
for(var i=0;i<list.length;i++) {
if(list[i].id==newdata.id) {//循环判断id是否相等,等于的话才去修改
list[i]=newdata
}
}
//重新还原数据
this.setData({
list:list
})
这样些难免有些过于繁琐,偶然看到一个比较少见的写法:
var newdata={id:1,name:'小明'};
//对象修改
this.setData({
["list["+this.data.list.findIndex(x=>x.id==1)+"]"]:newdata
})
//单字段修改
this.setData({
["list["+this.data.list.findIndex(x=>x.id==1)+"].name"]:newdata.name
})
这样大大减少了代码量和循环的次数
个人理解:小程序的data为一个JSON对象,平时我们可以使用JSON[对象名]来获取到对象,我们也可以直接通过this.data.list[下标]来获取列表中的某一个对象,setData的时候,也是需要一个对象,这样我们可以用["对象[下标]"]的方式来进行直接修改,而无需多次循环判断
Comments NOTHING