前提・実現したいこと
オブジェクトの中身を順番に取り出したいのですが存在しているはずの要素が undefined と表示されてしまいます。
エラーとして考える理由がしばらく考えても分からず投稿しました。
発生している問題・エラーメッセージ
エラーメッセージ TypeError: Cannot read property 'Name' of undefined ratioListsLoop src/components/common/parts/card/stuffCard.tsx:126 123 | // console.log(target.name, ratioObj, ratioObj.ratio_lists[i], count); 124 | if(arrRatioList.length < 2){ 125 | console.log(ratioList); > 126 | if(ratioList[i].Name !== targetName) arrRatioList.push(ratioList[i]); | ^ 127 | } 128 | } 129 | console.log(arrRatioList);
property 'Name' は console.logで確認したところ読み込めています。
該当のソースコード
const ratioListsLoop = (ratioList: RatioListType[], targetName: string): RatioListType[] => { let count: number = 3; const arrRatioList = []; for( let i = 0; count > i; i += 1 ){ if(arrRatioList.length < 2){ if(ratioList[i].Name !== targetName) arrRatioList.push(ratioList[i]); } } return arrRatioList; };
関数ratioListsLoopでは、引数:ratioListのキーNameとtargetNameの中身が同じ場合は空の配列であるarrRatioListへ何もpushせずにfor文を回すようにしています。
音のオブジェクトの中身
配列の中に食品成分がobjectで入っています。ratioListの中身は下記の通りです。
ratioList
1[ 2 { 3 "Name": "Molybdenum", 4 "nameJP": "モリブデン", 5 "Ratio": 70.8 6 }, 7 { 8 "Name": "Biotin", 9 "nameJP": "ビオチン", 10 "Ratio": 19.56 11 }... 12]
試したこと
関数ratioListsLoopの結果を受け取る場所を変える程度はしましたがわからず。データを同時に処理しているのでそれが関係しているのかなと思ったり、でもどうすれば良いのかもわかりませんでした。
追記:エラー直前のbreakpointを貼りました
↑恥ずかしながらコードがごちゃごちゃしていてすみません。エラー直前のbrekapoint時の中身の方を示す目的で貼りました。
ratioListの要素2(セレン)で引っ掛かります。
{Name: "Selenium", nameJP: "セレン", Ratio: 1.2}
ちなみにこの箇所以外でも引っかかるためこのratioListだけの問題ではないようです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/26 13:11 編集
2020/08/26 13:08
2020/08/26 13:19
2020/08/26 17:01 編集
2020/08/26 21:47
2020/08/26 21:49
2020/08/26 22:06 編集
2020/08/30 13:24
2020/08/30 13:39
2020/08/31 07:15 編集