编辑:所以,我找到了我最初问题的解决方案,这让我意识到我还有另一个问题。
它似乎比我想象的要容易
setNumbers(e) {
e.preventDefault();
var already_exists = false;
var ls_data = this.state.storedNumbers;
var rname = document.getElementById('name').value;
var rnumb = document.getElementById('nummer').value;
var ls_key = this.state.ls_key;
for (key in ls_data) {
if(ls_data.hasOwnProperty(key) === true) {
if(ls_data[key].name === rname) {
if(ls_data[key].Number === rnumb) {
already_exists = true;
}
}
}
}
if(!already_exists) {
ls_key++;
ls_data[ls_key] = {
name: rname,
Number: rnumb
};
localStorage.setItem("ls_numbers", JSON.stringify(this.state.storedNumbers));
localStorage.setItem("ls_key", ls_key);
this.setState({
ls_key: localStorage.getItem("ls_key"),
});
}
}
但现在我的问题是,我不能迭代它,因为它是一个嵌套对象而不是一个数组。所以.map不起作用(this.state.storedNumbers.map不是函数)。
遗憾地将storedNumber更改为数组并不能解决问题,如
ls_data[ls_key] = {
name: rname,
Number: rnumb
};
不在数组中工作。所以现在我的问题是。我可以使用我的ls_key变量在我的数组中创建一个名称对象吗?使用上面的代码会导致:
[
null,
{
"name" : "Person 1",
"Number" : "XXXXXXXX"
},
{
"name" : "Person 2",
"Number" : "XXXXXXXX"
}
]
虽然数组看起来像:
[
"1": {
"name" : "Person 1",
"Number" : "XXXXXXXX"
},
"2": {
"name" : "Person 2",
"Number" : "XXXXXXXX"
}
]
或者有没有办法迭代嵌套的JSON结果,就像.map对数组一样?
答案 0 :(得分:0)
好吧那么,我自己想出来了:
我的数据格式不正确(初始问题)的原因,仍然是蓝色的。我已经改变了很多代码并再次恢复原始代码,瞧瞧,奇迹般地说这一切都奏效了。不能告诉你有什么区别。之后,我可以轻松简化编辑问题中显示的代码。
要迭代数据,下面的代码是我的解决方案。如果您有更清洁的解决方案,请告诉我们!
{this.state.storedNumbers.length < 1
? <li className='list-group-item'><strong>Geen recente nummers...</strong><span className='pull-right'><span className='glyphicon glyphicon-warning glyph-xl'></span></span></li>
: Object.keys(this.state.storedNumbers).map((number) => {
return (
<div className='item' key={number}>
<a className='list-group-item list-link'>
<strong>{this.state.storedNumbers[number].name}</strong> - ({this.state.storedNumbers[number].Number})
</a>
<span className='button-delete glyph-xl'>
<i className='glyphicon glyphicon-trash glyph-xl' aria-hidden='true'></i>
</span>
</div>
)})
}