use*_*667 7 javascript ecmascript-6 vue.js vuejs2
我在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"
}
]
Run Code Online (Sandbox Code Playgroud)
然后,我将该对象复制并删除某些属性(如果需要),然后将对象发布到我的后端,如下所示:
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
})
Run Code Online (Sandbox Code Playgroud)
问题是,这delete o.info;还将从我的vm根数据中删除该属性,而且我不理解为什么,因为我创建了一个新的变量/将根数据复制到了该根数据中。那么,如何在发布数据之前从数据中删除某些对象属性而不更改vue中的根数据vm?
Lah*_*ori 15
这是因为在 javascript 中对象是按引用复制的,这意味着尽管您正在更改postData哪个实际上是引用保存数据的原始地址,即rows. 你可以这样做
postData = JSON.parse(JSON.stringify(rows))
Run Code Online (Sandbox Code Playgroud)
您需要通过克隆复制数据。有多种克隆数据的方法,我建议使用lodash函数,cloneDeep
postDataCopy = _.cloneDeep(postData)
然后,您可以postDataCopy根据需要进行修改,而无需修改原始文件。
小智 6
您需要复制参考变量。
// ES6
let copiedObject = Object.assign({}, originalObject)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8421 次 |
| 最近记录: |