JavaScriptで数式を英単語の読み方に変換する関数の実装方法
問題
数式を表す文字列(例:「5 - 8」)を受け取り、その式を英語の単語による読み方(例:「Five Minus Eight」)に変換して返すJavaScript関数を作成します。
対応する演算子は以下の通りです。
- + : Plus(足す)
- - : Minus(引く)
- * : Times(掛ける)
- / : Divided By(割る)
- ** : To The Power Of(累乗)
- = : Equals(等しい)
- != : Does Not Equal(等しくない)
扱う数値は1から10までです。もし入力された演算子が上記のリストに存在しない場合は、「That's not an operator!」というエラーメッセージを返します。
実装コード
以下が実際のコードです。
const str = '5 - 8';
const convertToWords = (str = '') => {
// 演算子と英語表現の対応表
const o = {
"+" : "Plus",
"-" : "Minus",
"*" : "Times",
"/" : "Divided By",
"**" : "To The Power Of",
"=" : "Equals",
"!=" : "Does Not Equal",
}
// 数値と英語表現の対応表
const n = {
1 : "One",
2 : "Two",
3 : "Three",
4 : "Four",
5 : "Five",
6 : "Six",
7 : "Seven",
8 : "Eight",
9 : "Nine",
10 : "Ten",
}
// 文字列をスペースで分割(左辺・演算子・右辺)
let t = str.split(' ')
let y = ''
let c = 0
// 演算子の妥当性をチェック
for (const [key, value] of Object.entries(o)) {
if(key !== t[1])
c++;
}
if(c === Object.keys(o).length) return "That\'s not an operator!"
// 左辺の数値を変換
for (const [key, value] of Object.entries(n)) {
if(key === t[0])
y += `${value} `
}
// 演算子を変換
for (const [key, value] of Object.entries(o)) {
if(key === t[1])
y += `${value}`
}
// 右辺の数値を変換
for (const [key, value] of Object.entries(n)) {
if(key === t[2])
y += ` ${value}`
}
return y;
}
console.log(convertToWords(str));
コードの解説
この関数の処理の流れは以下のようになっています。
- 対応表の定義: 演算子を英語表現に変換するためのオブジェクト
oと、数値を英語表現に変換するためのオブジェクトnを用意します。 - 文字列の分割:
split(' ')を使って入力文字列をスペースで分割し、左辺・演算子・右辺の3つの要素を持つ配列を作ります。 - 演算子の検証: 分割した2番目の要素(演算子)が対応表に存在するか確認します。すべてのキーと一致しなかった場合はカウンタ
cが対応表のサイズと等しくなり、エラーメッセージを返します。 - 各要素の変換: 左辺の数値 → 演算子 → 右辺の数値の順に、それぞれ対応する英語表現を取得して連結していきます。
出力結果
上記のコードを実行すると、コンソールには以下のように表示されます。
Five Minus Eight
入力文字列「5 - 8」が正しく「Five Minus Eight」という英語表現に変換されていることがわかります。
まとめ
この実装では、オブジェクトを対応表として使うことで、シンプルかつ拡張しやすい形で数式の言語化を実現しています。対応表に新しい演算子や数値を追加するだけで、機能を簡単に拡張できる点がポイントです。
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptで数値を丸める・切り捨てる方法|Math.round()とMath.trunc()の違いと使い方
JavaScriptには、小数を整数へ変換するためのメソッドとして、Math.round() と Math.trunc() の2つが標準で用意されています。Math.round():小数点以下を四捨五入し、最も近い整数に丸めます。例えば「3.5」は「4」に、「3.4」は「3」になります。Math.trunc():小数点以下を単純に取り除き、整数部分だけを残します。「3.9」も「3.1」もどちらも「3」になります。それぞれの特徴を踏まえながら、実際のコード例を見ていきましょう。Math.round() と Math.trunc() の違いメソッド動作例(3.999)Math.round()四捨五