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不,你的问题很好