#前書き
この投稿は筆者がJavaScriptの勉強としてこなした課題を、どのように解いたかを解説する自分用のメモです。
ついでに同じような問題にぶつかっている人の助けになったら幸いと思いアップしています。
初心者のため間違う可能性や表現が悪い場合があります。ご注意ください。
また、間違った表現などがあった際は指摘してくださると幸いです。
よろしくお願いいたします。
※ちなみに課題はcodewarsを利用しています。
練習に最適なので、ぜひ挑戦してみてください↓
https://www.codewars.com
それでは早速本日の課題を解いていきましょう!
#課題
あなたの仕事は、負でない整数を引数として受け取り、その桁を降順にして返すことができる関数を作ることです。基本的には、可能な限り大きな数字を作るために桁を並べ替えることである。
例
入力 42145 出力。54421
入力 145263 出力 654321
入力 123456789 出力 987654321
引用元URL(codewars):https://www.codewars.com/kata/5467e4d82edf8bbf40000155/train/javascript
※課題はDeepLにて翻訳して載せているだけなため、解釈などが異なる場合があります。英語本文は上記URLを参照にしてください。
#回答
function descendingOrder(n){
return parseInt(String(n).split('').sort().reverse().join(''))
}
console.log(descendingOrder('123456789'));
//>> 987654321
#解説
回答で使用されている関数の説明や、注意する箇所などを解説します。
##parseInt()
StringオブジェクトをIntオブジェクトに変換してくれる関数。
第一引数には、Stringオブジェクトを指定する。
第二引数には、基数を指定する。指定しない場合は、文字列より自動的に基数が判定される。
let str = "123"
let num = parseInt(str);
console.log(num); //>> 123
##String()
引数をStringオブジェクトに変換してくれる関数。
let num = new String(365);
console.log(num); //>> String {"365"}
##split()
Stringオブジェクトを分割して配列化するメソッド。
第一引数には区切り文字を指定する。
また、第二引数を指定することで取得する要素を制限できる。
今回のsplit('')は、Stringオブジェクトの数字を1文字ずつ配列にしている。
let lists = 'リンゴ,バナナ,メロン,イチゴ,スイカ';
let num = '12345'
let result = lists.split(',', 3);
let result2 = num.split('')
console.log( result ); //>> ['リンゴ', 'バナナ', 'メロン']
console.log( result2 ); //>> ['1', '2', '3', '4', '5']
##sort()
並び替えを実現するメソッド。
sort()はかなりさまざまな使い方があるが、今回は回答で使われている考え方のみここでは解説する。
sort()は単純に考えると、文字コードを数値に変換した値を小さい順に並び替えるメソッドのこと。
※その他、詳しいsort()の使い方でとてもわかりやすく解説されていたサイトを紹介します↓
とてもわかりやすくまとめられており、感謝しかありません。
https://dezanari.com/js-sort/
const num = ['1', '0', '2', '1']
let result = num.sort()
console.log(num) //>> ['0', '1', '1', '2']
##reverse()
配列の要素を反転させるメソッド。
const num = ['0', '1', '1', '2']
let result = num.reverse()
console.log(num) //>> ['2', '1', '1', '0']
##join()
配列の全要素を順に連結した文字列を新たに作成するメソッド。
今回のjoin('')は、要素の値をそのまま連結したものになります。例では2番目。
const elements = ['Fire', 'Air', 'Water'];
console.log(elements.join());
// expected output: "Fire,Air,Water"
console.log(elements.join(''));
// expected output: "FireAirWater"
console.log(elements.join('-'));
// expected output: "Fire-Air-Water"
引用:MDN Web Docs
#まとめ
今回は入力として渡された数値を降順で並び替える課題を解きました。
最初はif分岐などを活用して必死に頑張っていましたが、便利なメソッドを活用することで最終的に1行でかけることがわかり、プログラミングのすごさとできる方のコードの美しさに感動しました。
今回の中で、sort()はかなり様々な場面で活用されており、今後時間がある時に自分自身の言葉でまとめたいと思います。乞うご期待ください。
Twitterやっていますので、友達になりたい方入ればフォローしてくださると喜びます!一緒にプログラミング頑張る友達ができると嬉しいです。
最近Twitterはあまり活動できていませんが。。。
DMなどくだされば反応はしますのでご安心を!