編集:最初の質問に解決策が見つかりました。リアクション状態とJSONと配列=>結果が不一致
私は
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は関数ではありません)。
ls_data[ls_key] = {
name: rname,
Number: rnumb
};
が配列に動作していないとして、配列にstoredNumberを変更
は悲しいことに、問題を解決していません。だから今私の質問です。私の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"
}
]
かの.mapが配列の場合と同様に、ネストされたJSONの結果を反復処理する方法がある中で結果上記のコードを使用していますか?
これはstoredNumbers状態を変更する唯一の場所ですか? 1つのことは、setStateは非同期ですが、それは間違いなくあなたのオブジェクトの不正な作成の理由ではないということです。 –
それは確かに唯一の場所です。データが正しく設定されたら、マップを実行してデータを表示します。 – Maikey