##実現したいこと・試したこと
複数の変数(data.customerCode、data.arrivalDate、apple、orangeなどなど・・・)に対して、もしnullもしくはundefinedであればハイフンに変換する、という処理を行いたいです。
1つ1つの例であれば、
JavaScript
1if(data.customerCode === null || data.customerCode === undefined){ 2data.customerCode = "-"; 3} 4
とのように書けばいいと思うのですが、これを変数の数だけ書くのはコードの可読性の点から良くないと思いました。
繰り返し処理でそれぞれの変数に対してnull&undefinedチェックを掛けたいのですが、どのようにすれば良いでしょうか。
繰り返し処理ごとに変数を変えるような方法がわからず、ご教示いただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
関数にするのが妥当だと思います。
javascript
1function ConvertNullToHyphen(data) { 2 if (data === null || data === undefined) { 3 return "-"; 4 } else { 5 return data; 6 } 7} 8 9data.customerCode = ConvertNullToHyphen(data.customerCode); 10data.arrivalDate = ConvertNullToHyphen(data.arrivalDate); 11apple = ConvertNullToHyphen(apple); 12orange = ConvertNullToHyphen(orange);
投稿2021/07/07 06:10
総合スコア4524
0
js
1data.customerCode === null || data.customerCode === undefined
何故if (data.customerCode)
ではダメなんですか?
恐らく数値の0や空文字列がfalse判定になる事が原因だと思います。
なのでif (data.customerCode == null)
にしましょう。
等価演算子を使った時の挙動でnullやundefinedが比較対象となった場合、
null == undefined
のみtrueになり、それ以外の0やら空文字列は異なるものと判別されます。
- 等価演算子 - MDN
- ECMAScript 11.9.3 (等式比較アルゴリズム) ←全世界のJavaScriptの仕様書
念の為さっとみましょうか。
- If Type(x) is the same as Type(y), then
1-a. If Type(x) is Undefined, return true.
1-b. If Type(x) is Null, return true.
x == y
の比較時、xとyの型が同一でundefinedやnullの型であればtrue
を返す。
- If x is null and y is undefined, return true.
- If x is undefined and y is null, return true.
x == y
の比較時、xとyがnull == undefined
の相関であればtrue
を返す。
- Return false.
以降4-9のセクションではnullやundefinedがないので
null == 0
やundefined == ""
等の比較は全てfalse
を返す。
以上の事からdata.customerCode == null
で十分です。
JS使いなら知ってるので問題ありません。
以上の事からコードが簡単になるので別にコピペで良くね?ってのが一目の感想
js
1data.customerCode = data.customerCode == null ? "-" : data.customerCode; 2data.arrivalDate = data.arrivalDate == null ? "-" : data.arrivalDate; 3apple = apple == null ? "-" : apple; 4orange = orange == null ? "-" : orange;
新しいブラウザでしか使えませんが、
Null合体演算子というものもあります。
Null 合体演算子 (??) は論理演算子の一種です。この演算子は左辺が null または undefined の場合に右の値を返し、それ以外の場合に左の値を返します。
OR 演算子 (||) と違い、null と undefined 以外の falsy な値のときには左の値を返します。つまり、左辺が '' や 0 の場合は左の値を評価して返します。その他の例については以下を参照してください。
なので下記でOK
js
1data.customerCode = data.customerCode ?? "-"; 2data.arrivalDate = data.arrivalDate ?? "-"; 3apple == apple ?? "-"; 4orange == orange ?? "-";
コピペだらけで大変になっちゃう!
えっ、そうなの?十分シンプルじゃね?
最大限譲歩してデフォルト値指定の関数を実装するくらいですかね。
なんでハイフンなのかもコードに欲しい。
toHyphenみたいな関数名にするのも良いけど、デフォルト値を示すdef
関数とかどうかな?
js
1const def = (v, d) => v == null ? d : v; 2data.customerCode = def(data.customerCode, "-"); 3data.arrivalDate = def(data.arrivalDate, "-"); 4apple == def(apple, "-"); 5orange == def(orange, "-");
まぁ、それ数値かもしれないですよね。
計算途中で勝手に文字列になってバグる可能性があるので、
ハイフンに変更するのはJavaScriptの全ての計算が終わって、
DOMツリーを編集して画面更新する瞬間のタイミングにした方が良いです。
そうしないと数値計算する時に、
ノイズとして混入してしまったハイフンを取り除くみたいな無駄な作業が挟まる……可能性が一応あるので、
基本的に受け取ったデータは出来る限りそのままにしておく方が望ましいです。
そんな問題殆どなさそうですが、
ちらっと検討してみてくださいね。
投稿2021/07/07 07:28
総合スコア21203
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
変数というのはdataのことですか?
配列にしてループして処理するのが妥当では?
javascript
1const d1={customerCode:true}; 2const d2={}; 3const d3={customerCode:null}; 4[d1,d2,d3].forEach(data=>{ 5 if(data.customerCode === undefined || data.customerCode === null){ 6 data.customerCode = "-"; 7 } 8}); 9console.log(d1); 10console.log(d2); 11console.log(d3);
投稿2021/07/07 05:59
編集2021/07/07 06:03総合スコア116724
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 06:19