前提・実現したいこと
正規表現で得た結果がObject is possibly 'null' or 'undefined'と表示されてしまい取得できていません。
結果を取得したいです。
発生している問題・エラーメッセージと該当のソースコード
Object is possibly 'null' or 'undefined'.ts(2533)
const nameJPFind = elmObj.find(item => item.name === targetName), nameJPRegex: RegExp = /(.*)((.*))/, nameJPMatched = nameJPFind?.nameJP.match(nameJPRegex), nameJP = nameJPMatched !== undefined || nameJPMatched !== null ? nameJPMatched[1] : nameJPFind?.nameJP;
nameJPFindには文字列 "ビタミンA(レチノール活性当量)"のような文字列が入ります。
targetNameは"ビタミンA(レチノール活性当量)"のような文字列の英単語("Retinol"など)が入っておりelmObj配列の中にはtargetNameと同じ英単語とそれの日本語が含まれたオブジェクトが格納されておりfind()関数で一致させて目標のオブジェクトを取得しています。
nameJPRegexは"(レチノール活性当量)"のカッコ書きがある場合はMatchさせる正規表現のパターンです
nameJPMatchedはmatch()関数を走らせています。nameJPFind?.nameJPはオブジェクトの中にあるtargetNameの日本語を取得しています。
find()を使ったため Object is possibly 'undefined'と怒られてしまうのを回避するために "?" をつけています。これがタイトルのエラーに繋がります。
nameJPは欲しい結果 "ビタミンA(レチノール活性当量)" の中の "ビタミンA" 部分のみが取得できます。しかしここでタイトルのエラーが nameJPMatched[1] に対して表示されてしまいます。
試したこと
欲しい結果は別の書き方で取得しました。
const nameJPFind = elmObj.find(item => item.name === targetName), nameJPStr = nameJPFind?.nameJP as string, nameJPRegex: RegExp = /(.*)((.*))/, nameJPMatched = nameJPStr.match(nameJPRegex), nameJP: string = nameJPMatched !== null ? nameJPMatched[1] : nameJPStr;
nameJPStr = nameJPFind?.nameJP as string を追加しました。
型アサーションとして as string で型上書きして型から "undefined" を無くしました。しかし型アサーションをできれば使わずにもっとシンプルにTypeScriptの書き方で表現できるのではないかと思い質問しました。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/03 05:58