如何通过 vue js 更改 JSON 对象的键名
How to change key name of JSON object via vue js
我在使用 vue 更改 JSON 对象的键名 "User1" 和 "User2" 时遇到一些问题。
myJSON = {"User1": {"damage": "10000"}, "User2": {"damage": "10000"}}
users = ["User1","User2","User3","User4"]
这是循环代码和一些注释。实际上问题是我不能在 v-model 中使用 "key"...
<div class="mb-3" v-for="(item, key, index) in myJSON">
<el-select v-model="key" filterable placeholder="Select"> // This is doesn't work - it's my problem =)
<el-option
v-for="cl in users"
:key="cl"
:label="cl"
:value="cl">
</el-option>
</el-select>
<el-input-number v-model="item.damage"></el-input-number> // It's okey, damage is changing.
</div>
我已经尝试更改 v-model:
v-model="item.key" // JSON after this
myJSON = {"User1": {"damage": "10000", "key": "User3"}, "User2": {"damage": "10000", "key": "User4"}}
v-model="myJSON[key]" // Have error
TypeError: Cannot read property 'myJSON' of undefined
v-model="myJSON[key]" // Same
TypeError: Cannot read property 'myJSON' of undefined
select 用户在 <el-select>
之后,我需要这样的东西:
{"User2": {"damage": "10000"}, "User3": {"damage": "10000"}}
或者
{"User3333": {"damage": "10000"}, "User312321": {"damage": "10000"}}
但是我的方法不对,请大家帮忙
不确定是否可以使用 v-model 直接更改对象的键,但有一个解决方法。
<div id="app">
<ol>
<li v-for="(item, index) in myJSON_format2">
{{item}}
<input v-model="item.damage"/>
<input v-model="item.key"/>
</li>
</ol>
</div>
new Vue({
el: "#app",
data: {
myJSON: {"User1": {"damage": "10000"}, "User2": {"damage": "10000"}},
myJSON_format2: []
},
methods: {
change_myJSON_toFormat2 () {
for (let i in this.myJSON) {
this.myJSON_format2.push({ damage: this.myJSON[i].damage, key: i })
}
}
},
created () {
this.change_myJSON_toFormat2()
}
})
请在这里查看:https://jsfiddle.net/shivampesitbng/dync94kt/24/
- 解决方法:
- 将 myjson 的 ds 更改为 obj 数组
- 在 vue-template 中用 v-for 循环 arr
- 在更改 "damage" 键时更改了 "user" 键。
我在使用 vue 更改 JSON 对象的键名 "User1" 和 "User2" 时遇到一些问题。
myJSON = {"User1": {"damage": "10000"}, "User2": {"damage": "10000"}}
users = ["User1","User2","User3","User4"]
这是循环代码和一些注释。实际上问题是我不能在 v-model 中使用 "key"...
<div class="mb-3" v-for="(item, key, index) in myJSON">
<el-select v-model="key" filterable placeholder="Select"> // This is doesn't work - it's my problem =)
<el-option
v-for="cl in users"
:key="cl"
:label="cl"
:value="cl">
</el-option>
</el-select>
<el-input-number v-model="item.damage"></el-input-number> // It's okey, damage is changing.
</div>
我已经尝试更改 v-model:
v-model="item.key" // JSON after this
myJSON = {"User1": {"damage": "10000", "key": "User3"}, "User2": {"damage": "10000", "key": "User4"}}
v-model="myJSON[key]" // Have error
TypeError: Cannot read property 'myJSON' of undefined
v-model="myJSON[key]" // Same
TypeError: Cannot read property 'myJSON' of undefined
select 用户在 <el-select>
之后,我需要这样的东西:
{"User2": {"damage": "10000"}, "User3": {"damage": "10000"}}
或者
{"User3333": {"damage": "10000"}, "User312321": {"damage": "10000"}}
但是我的方法不对,请大家帮忙
不确定是否可以使用 v-model 直接更改对象的键,但有一个解决方法。
<div id="app">
<ol>
<li v-for="(item, index) in myJSON_format2">
{{item}}
<input v-model="item.damage"/>
<input v-model="item.key"/>
</li>
</ol>
</div>
new Vue({
el: "#app",
data: {
myJSON: {"User1": {"damage": "10000"}, "User2": {"damage": "10000"}},
myJSON_format2: []
},
methods: {
change_myJSON_toFormat2 () {
for (let i in this.myJSON) {
this.myJSON_format2.push({ damage: this.myJSON[i].damage, key: i })
}
}
},
created () {
this.change_myJSON_toFormat2()
}
})
请在这里查看:https://jsfiddle.net/shivampesitbng/dync94kt/24/
- 解决方法:
- 将 myjson 的 ds 更改为 obj 数组
- 在 vue-template 中用 v-for 循环 arr
- 在更改 "damage" 键时更改了 "user" 键。