小程序如何设置data的值
发布于 5 年前 作者 xiafu 10350 次浏览 来自 问答
data: {
    cart: {
        "1": {
            "count": 1,
            "total": 1,
            "list": {
                "3": 1
            }
        }
    }}

比如要设置"3":1为"3":2要如何设置呢?

"1"和"3"是动态改变的,要用变量代替哦。

10 回复

10年淘宝开放平台见过的

刚刚测量了一下,maq的方法也是可以的,而且比整体斌值的方法更好用,感谢maq

你把list设置成list:{

“3”:2

}不就行了

我把键值1改成a1以后,Mr.J的整体斌值方法是可行的。maq的方法我之前都有测试过多遍,变通过几次都是不行的,可能是哪里有疏忽了。谢谢各位热心回答。

@铭锋科技: 是的。见过?  ^_^

var idx = 3;

var newData={};

newData['cart[1].list[' + idx + ']']=2;


page.setData(newData);

这样也行的吧

不错,我也学习了

3 楼的写法肯定是可以的。如果说有什么不足之处的话,就是他把整个数据对象都重新赋值了一遍,这样有可能会波及很多“无辜”的数据项,导致重新渲染的负担变大。当然如果涉及的渲染内容不是很多的话问题并不明显。

我在 4 楼给出的代码是我刚刚在开发者工具里跑通的,如果你那里跑不通的话,我也不知道是哪里的问题了。

前面给的代码确实不能直接用,应该这样写:

var idx = 3;
page.setData({
    ['cart[1].list[' + idx + ']']: 2
});

问题出在你用数字作为属性名,这个在 js 语法本身是可以的,但在小程序 setData 的属性描述时就不行了,数字型的属性名必须用数组下标的方式写。

BTW: 如果你提问题的时候直接把你试过不行的方法说出来,就能避免耽误别人的时间了。我在 2 楼的回答其实要点在于提醒你用方括号的形式可以支持表达式作属性名,你在原帖中特别提到属性名是动态的,因为这个不常见,以为你不知道,所以专门说一下。如果早说你知道这种写法,甚至直接给出你原本的写法,我就可以直接帮你找出错误点了。

回到顶部