小程序数组修改的简化写法,无需大量循环赋值

发布于 2023-03-30  590 次阅读


在小程序中,我们经常遇到需要修改某一个数组里面的某一个对象的值,平常我们是这样写:

    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的时候,也是需要一个对象,这样我们可以用["对象[下标]"]的方式来进行直接修改,而无需多次循环判断

啊~~~~~~~~~
最后更新于 2023-03-30