🐷

JavaScriptで空文字を判定する

2020/09/20に公開2

if文を使用する事で文字列が空文字かどうか判定する方法をここの記事で紹介したいと思います。

CodewarsでJavaScriptの問題を解いていると、このような問題がありました。

0 から 「引数に渡された数値」 までの数字を含む配列を生成する関数を書いてください。
また引数に何も数値が書かれていない場合は空配列を返してください。

例:
console.log(arr(4))を実行すると[0,1,2,3] の配列、
console.log(arr())を実行すると[]の空配列

が返ってくる関数です。

この問題の中で引数に数字が渡された場合は、

const arr = (num) => {
  const numbers = [...Array(num).keys()]
  return numbers
} 

この関数で実行すると求められている答えが返ってきました。

しかし、引数に何も渡されなかった場合に、空配列ではなく[0]が返ってきてしまいます。

そこでこの場合に、JavaScriptの空文字をfalseと判定する特性を活かして、if文の条件分岐をこの関数内に追加します。

const arr = (num) => {
  const numbers = [...Array(num).keys()]
  if(!num) return []
  return numbers
} 

補足:
arr() = false
(!num) = true (空文字列falseの逆の値)
if文の()内がtrueの時に値が返ってくる

この関数で今回の問題で求められていた答えが返ってくる関数が完成しました。

JavaScriptでは他にも

 "" = false
 null = false
 [] = true
 {} = true

という事もついでに押さえておきたいポイントだなと思います。

Discussion

toppotoppo

元の問題文の制約次第ですが、引数に0を渡された際の挙動が気になりますね。
引数が0のときの戻り値が[]を想定されていれば現状で動きますが、もし[0]を期待される問題であれば、0もfalsyな値(判定式でfalseと判定される値)なので、現状だとif文の判定がtrueとなり、[]が返されてしまいますね。

<参考>
https://qiita.com/phi/items/723aa59851b0716a87e3

Takeru IinoTakeru Iino

コメントありがとうございます。
確かに0を引数に渡した場合も空配列が返ってきます。
今回の問題文の制約に沿って考えると、正しい関数と認識されましたが、0もfalsyな値というのは、僕自身勉強になりました。
ありがとうございます!