Javascript 如何为数组中的多个对象设置一个属性,但在vue js中保留单独的反应性
在我的例子中,我有一个包含多个对象的Javascript 如何为数组中的多个对象设置一个属性,但在vue js中保留单独的反应性,javascript,arrays,object,vuejs2,vue-reactivity,Javascript,Arrays,Object,Vuejs2,Vue Reactivity,在我的例子中,我有一个包含多个对象的数据数组 data() { return { selected: 0, presetData: [true, true, true], data: [ { name: "name 1" }, { name: "name 2" } ] }; }, 然后我想将数据中的每个对象推入,如下所示 setNewData() { th
数据数组
data() {
return {
selected: 0,
presetData: [true, true, true],
data: [
{
name: "name 1"
},
{
name: "name 2"
}
]
};
},
然后我想将数据中的每个对象推入,如下所示
setNewData() {
this.data.forEach((o, i) => {
this.$set(this.data[i], "time", this.presetData);
});
},
$set(item.time,selected,true)
现在,我的带有预设数据
的手机被推入数据
中,其外观如下
data: [
{
name: "name 1",
time: [true, true, true]
},
{
name: "name 2",
time: [true, true, true]
}
]
我想更改每个对象的单个time
属性,我使用如下内容
setNewData() {
this.data.forEach((o, i) => {
this.$set(this.data[i], "time", this.presetData);
});
},
$set(item.time,selected,true)
我的问题
我的问题是,这将更改两个对象的time
属性。如何首先正确地将预设数据
推/设置为数据
,下面是我的全部代码,很抱歉,我对编程非常陌生,这里是
newvue({
el:“应用程序”,
数据(){
返回{
已选择:0,
预设数据:[真,真,真],
数据:[
{
名称:“名称1”,
},
{
姓名:“姓名2”,
}
]
};
},
方法:{
setNewData(){
this.data.forEach((o,i)=>{
this.$set(this.data[i],“time”,this.presetData);
});
},
}
})
设置数据
0
1.
2.
{{item.name}
{{item.time}
变真
变假
这是一个对象引用问题。您的每个时间
属性都引用相同的数组(预设数据
)。您可以通过制作浅拷贝来解决此问题
使用相同的技术分配新的数据时,也可以避免Vue.set()
setNewData(){
this.data=this.data.map(d=>({
…d,//创建每个数据项的浅层副本
时间:[…this.presetData]//将“time”添加为presetData的浅层副本
}))
},
要更改time
属性中的单个数组元素,需要继续使用Vue.set()
,即
this.$set(item.time,selected,true)
非常感谢,是的,对象参考。你认为我应该改变我的问题吗?@aleng不,你的问题很好