質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

4回答

2975閲覧

複数の変数に同じ処理をかけたい

soi

総合スコア34

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/07/07 05:51

##実現したいこと・試したこと
複数の変数(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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

soi

2021/07/07 06:19

配列の中に格納する方法もスマートだとは思うのですが、関数のやり方ですることにしました! 細かく関数まで書いてくださったku__ra__geさんをBAとさせてもらいました、皆さんご回答ありがとうございました。大変助かりました。
guest

0

js

1data.customerCode === null || data.customerCode === undefined

何故if (data.customerCode)ではダメなんですか?
恐らく数値の0や空文字列がfalse判定になる事が原因だと思います。

なのでif (data.customerCode == null)にしましょう。
等価演算子を使った時の挙動でnullやundefinedが比較対象となった場合、
null == undefinedのみtrueになり、それ以外の0やら空文字列は異なるものと判別されます。

念の為さっとみましょうか。

  1. 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を返す。

  1. If x is null and y is undefined, return true.
  1. If x is undefined and y is null, return true.

x == yの比較時、xとyがnull == undefinedの相関であればtrueを返す。

  1. Return false.

以降4-9のセクションではnullやundefinedがないので
null == 0undefined == ""等の比較は全て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

miyabi-sun

総合スコア21203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

soi

2021/07/08 01:31

関数で書いていたのですが、レビューでこちらのNull演算子を使った方法がいいとの指摘を受け修正になりました、、! ご指摘ありがとうございました。
guest

0

そういう関数を作ってしまうってのではどうでしょう

data.customerCode = kansu(data.customerCode);

投稿2021/07/07 06:05

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問