LoginSignup
8
3

More than 3 years have passed since last update.

【Codewars】Math.min()を使って配列の最小要素を取得する

Last updated at Posted at 2021-04-20

はじめに

Incrementsのnara_sakiです。Qiita広告の企画営業をしています。文系ビジネス職ですが「実際に自分でも手を動かしてみたい!」という思いから、JavaScriptを勉強しています。

現在は下記の方法で学習しています。

本記事では、Codewarsの問題と解答を書いていきます。なお、言語はJavaScriptを使っています。

問題

Find the smallest integer in the array

問題(原文)

Given an array of integers your solution should find the smallest integer.

For example:

Given [34, 15, 88, 2] your solution will return 2
Given [34, -345, -1, 100] your solution will return -345
You can assume, for the purpose of this kata, that the supplied array will not be empty.

問題(日本語訳)

整数の配列の中で、一番小さい要素を取得してください。

例:[34, 15, 88, 2] →答えは2
例:[34, -345, -1, 100] →答えは-345

※今回配列は空になることはありません。

解答の大枠(Codewarsではあらかじめ下記の大枠が用意されています。必要箇所を埋めていきます)

class SmallestIntegerFinder {
  findSmallestInt(args) {

  }
}

解き方

複数の解き方がありますが、私は下記の手順で考えました。

  1. Math.min()関数で要素の最小値を取得する
  2. スプレッド構文を使い、配列(args)を展開する

1. Math.min()関数で要素の最小値を取得する

要素の最小値を取得するには、Math.min()関数を使うと良さそうです。MDNのMath.min()を参照しました。
最初は下記のコードを書いたのですが、エラーになってしまいました(NaN(整数に変換できない)が返ってきてしまいました)。

エラー
class SmallestIntegerFinder {
  findSmallestInt(args) {
    return Math.min(args); // エラーになってしまう
  }
}

2. スプレッド構文を使い、配列(args)を展開する

1では、配列が展開されていなかったため、エラーになってしまいました。そこでスプレッド構文を使い、配列(args)を展開([a, b, c, ...]の形にする)していきます。

配列を展開するには、スプレッド構文(...)を使います。具体的には、return Math.min(args)return Math.min(...args)に変えます。

解答

1,2をまとめると、下記のコードで正解になります。

正解
class SmallestIntegerFinder {
  findSmallestInt(args) {
    return Math.min(...args); // スプレッド構文を使い配列を展開する
  }
}

おわりに

スプレッド構文はドットインストールでも学習していたはずですが、こちらの問題を解いたことで自分の理解度が足りなかったことに気付かされました。初見には...の使い方が難しかったですね。あらためてインプット→アウトプットの重要性を実感します。引き続き学習を進めていきたいと思います。

Codewarsとは

無料で利用できるプログラミング学習サイトです。@javacommonsさんの記事に詳しい説明が載っています。

Codewarsは英語なので最初は少しとっつきにくいかもしれませんが、問題数が豊富であり、他の人の解答も見られてとても勉強になります。初学者の方におすすめです。

8
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3