vuejs 复制数据对象并删除属性也会从原始对象中删除该属性

新手上路,请多包涵

我在 vue 中有一个数据对象,看起来像这样

rows[
0 {
  title: "my title",
  post: "my post text",
  public: false,
  info: "some info"
},
1 {
 title: "my title",
  post: "my post text"
  public: true,
  info: "some info"
},
2 {
 title: "my title",
  post: "my post text"
  public: false,
  info: "some info"
}
]

然后我复制该对象并在需要时删除某些属性,然后再将对象发布到我的后端,如下所示:

 var postData = this.rows;
      postData.forEach(function(o) {

        if (o.public === true) {
          delete o.info;
        }
      });

      var uploadData = {};
      uploadData.blogpost = postData;
      axios({
          method: 'post',
          url: myUrl,
          responseType: 'json',
          data: uploadData
        })

问题是 --- delete o.info; 也会从我的虚拟机根数据中删除该属性,我不明白为什么,因为我创建了一个新变量/将根数据复制到那个变量中。那么,如何在不更改 vue 中的根数据 vm 的情况下,在发布数据之前从我的数据中删除某些对象属性?

原文由 user2722667 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 575
2 个回答

您需要通过克隆来获取数据的副本。有多种克隆数据的方法,我推荐使用lodash的函数, cloneDeep

postDataCopy = _.cloneDeep(postData)

然后你可以随意修改 postDataCopy 而不修改原来的。

原文由 Mikkel 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是因为在 javascript 中,对象是按引用复制的,这意味着尽管您正在更改 postData 实际上是引用保存数据的原始地址,即 rows 。你可以这样做

postData = JSON.parse(JSON.stringify(rows))

原文由 Lahori 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题