🕯️

バカ話ジェネレーター

に公開

MDN( https://developer.mozilla.org/ja/docs/Web/JavaScript
を参考に勉強するように注意が入ったので、ここを教本にしていきます。
その為、抜粋しながら進めたいと思います。

今回はこちらです。

今回もブラウザーの開発者ツールを使用します。

準備

HTMLファイル

テキストページ

完成

完成プログラム

最初に

日本語訳バージョン「result() 関数の作成」を見てみると

ii. weight 変数が宣言されている行内の、300 を ポンドからストーンに変換した値で置き換えます。そして ' stone' (ストーン) を Math.round() の結果に対して、その後ろに結合します。
iii. temperature 変数が宣言されている行内の、94 を華氏から摂氏に変換した値で置き換えます。こちらには ' centigrade' (摂氏~度) という文字を Math.round() の結果に対して、後ろに結合します。

という文章になってます。

  • ポンドとストーン
    ストーンは体重測定にの際に使われる単位らしいですよ。
    「1ストーン(stone)=14ポンド(pound)=6.35029kg」

  • 華氏と摂氏
    華氏は°F(Fahrenheit)、摂氏は℃(centigrade)つまり、温度です。
    私たちが普段使っているのは℃の摂氏です。

摂氏温度 華氏温度
約-17.8度 0度
氷点 0度 32度
沸点 100度 212度

さぁ、それを頭にいれた上で進めて行きます。

完成させるステップ

ステップはこちらを見てください

ポンドからストーンへ変換する公式

st(ストーン) =lb(ポンド) * 0.071429

華氏から摂氏へ変換する公式

(°F - 32) × 5 ÷ 9 = °C

私の完成品

「'customname'」だとタイポ間違いというエラーが出てしまうので「'custom-name'」に変更しています。

html(一部抜粋)

<body>
<div>
    <label for="custom-name">カスタム名を入力してください:</label>
    <input id="custom-name" type="text" placeholder="">
</div>
<div>
    <label for="us">US</label><input id="us" type="radio" name="us" value="us" checked>
    <label for="uk">UK</label><input id="uk" type="radio" name="jp" value="uk">
</div>
<div>
    <button class="randomize">ランダムなストーリーを生成</button>
</div>
<!-- Thanks a lot to Willy Aguirre for his help with the code for this assessment -->
<p class="story"></p>
<script src="main.js"></script>
</body>

main.js

const customName = document.getElementById('custom-name');
const randomize = document.querySelector('.randomize');
const story = document.querySelector('.story');

let storyText = '外は華氏 94 度だったので、:insertX: は散歩に出かけました。彼らが :insertY: にたどり着いたとき、彼らはしばらく恐怖で見つめ、それから :insertZ: を見つめました。ボブはすべてを見ましたが、驚きませんでした — :insertX: 体重は 300 ポンドで、暑い日でした。'
let insertX = ['ゴブリンのウィリー ','ビッグ・ダディ',' サンタクロース'];
let insertY = ['スープキッチン','ディズニーランド','ホワイトハウス'];
let insertZ = ['自然発火','歩道の水たまりに溶けた','ナメクジになって這い去った'];


function randomValueFromArray(array){
    const random = Math.floor(Math.random()*array.length);
    return array[random];
}

randomize.addEventListener('click', result);

function result() {
    let newStory = storyText;
    let xItem = randomValueFromArray(insertX)
    let yItem = randomValueFromArray(insertY)
    let zItem = randomValueFromArray(insertZ)

//replaceAllは全ての一致を置き換える,replaceは最初に一致したもの
    newStory = newStory.replaceAll(':insertX:', xItem);
    newStory = newStory.replaceAll(':insertY:', yItem);
    newStory = newStory.replaceAll(':insertZ:', zItem);

    if(customName.value !== '') {
        const name = customName.value;
        newStory = newStory.replace('Bob',name);
    }

    if (document.getElementById("uk").checked) {
        //st(ストーン) =lb(ポンド) * 0.071429
        const weight = `${Math.round(300 * 0.071429)}ストーン`;
        //(°F - 32) × 5 ÷ 9 = °C
        const temperature = `摂氏 ${Math.round((94 - 32) * 5 / 9)}`;
        newStory = newStory.replaceAll('華氏 94', temperature);
        newStory = newStory.replaceAll('300 ポンド', weight);
    }

    story.textContent = newStory;
    story.style.visibility = 'visible';
}

こっちのコードがいいよー!などあれば教えてくださると幸いです。

文献

Discussion