【发布时间】:2021-06-09 11:32:41
【问题描述】:
有什么问题:
这是我存储在this.state.jsondata 中的数据:
{
label{0:1,1:1}
prediction{0:0,1:1}
text{0:"abc",1:"def"}
}
这是前面JSON.stringify(this.state.jsondata):
{"label":{"1":0,"2":0,"3":0,"4":0},"text":{"1":"aa","2":"bb,"3":"cc","4":"dd"},"prediction":{"1":2,"2":2,"3":2,"4":2}}
当我使用此代码删除一个元素时:
removeData = (keyToRemove) => {
// create a deep copy of the object
const clonedJsonData = JSON.parse(JSON.stringify(this.state.jsondata))
// now mutate this cloned object directly
Object.keys(clonedJsonData).forEach(key => delete clonedJsonData[key][keyToRemove])
// set the state
this.state.jsondata = clonedJsonData
this.state.jsondata 变为:
{
label{1:1}
prediction{1:1}
text{1:"def"}
}
而不是像这样从 0 开始:
{
label{0:1}
prediction{0:1}
text{0:"def"}
}
所以基本上我想将key 设置回“0, 1, 2, 3..”
我尝试了什么:
我试图遍历我的数据,但我循环遍历它的方式有问题:
removeData = (keyToRemove) => {
// create a deep copy of the object
const clonedJsonData = JSON.parse(JSON.stringify(this.state.jsondata))
// now mutate this cloned object directly
Object.keys(clonedJsonData).forEach(key => delete clonedJsonData[key][keyToRemove])
// reset keys value
let i = 0
Object.keys(clonedJsonData).forEach(function(key) {
Object.keys(clonedJsonData[key]).forEach(function(k) {
var newkey = i++;
clonedJsonData[key][k] = clonedJsonData[key][k];
delete clonedJsonData[key][k];
})
})
// set the state
this.state.jsondata = clonedJsonData
}
预期的输出是什么?
预期的输出是:
{
label{0:1}
prediction{0:1}
text{0:"def"}
}
【问题讨论】:
-
@evolutionxbox 我不这么认为
-
您存储的不是 JSON。请展示真实的数据/对象。
-
@Teemu 这是我的数据imgur.com/a/epMQCfe
-
预期的输出看起来无效?
-
将其作为文本添加到帖子中......问题来了,对象的键不像数组索引那样“自动索引”,因为键始终是字符串。
标签: javascript arrays json object key