iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
自我挑戰組

JavaScript基礎30天系列 第 24

JS BMI 基礎介紹(2) DAY24

  • 分享至 

  • xImage
  •  

昨天我們資料都處理差不多啦~~
附上昨天寫完的 CodePen
CodePen: https://codepen.io/wemyferb/pen/VwjwPEd

現在我們只需要把資料呈現於畫面之上
不過這裡要注意一點
我們把 BMI狀態拆開來寫
因為我們BMI值要利用class來對應不同的顏色
由於要用 innerHTML 組字串
所以在外層先宣告一個空字串(因為innerHTML會清空內容再加,安全性差)

 let str = '';

再來是宣告日期的部分

let date = new Date();
let year = date.getFullYear();
let month = date.getMonth()+1;
let day = date.getDate();

BMI值對應的class名稱
利用物件包物件的形式

 let bmiStatus = {
            superthin: {
                class: 'superthin'
            },
            verythin: {
                class: 'verythin'
            },
            thin: {
                class: 'thin'
            },
            normal:{
                class: 'normal'
            },
            fat:{
                class: 'fat'
            },
            veryfat:{
                class: 'veryfat'
            },
            superfat:{
                class: 'superfat'
            }
        };

再來就是拆開BMI狀態啦~~

 for(let i = 0; i < item.length ; i++){
        let bmi = BMI(data[i]);
        let content = data[i].body;
        let height = item[i].heightVal / 100;
        let weight = item[i].weightVal;
        let bmiVal = (weight / Math.pow(height,2)).toFixed(2);
        str+= `    
                <div class="d-flex justify-content-center align-items-center py-3">
                    <div class="circle mr-3 ${bmiStatus[content].class}"></div> 
                    <div class="text-white mr-3">${bmi}</div>
                    <div class="text-white mr-3">BMI :${bmiVal} </div>
                    <div class="text-white mr-3">Height : ${item[i].heightVal} cm</div>
                    <div class="text-white mr-3">Weight : ${item[i].weightVal} kg</div>
                    <div class="text-white mr-3">${year+'/'+month+'/'+day}</div>
                    <i class="fas fa-trash text-white trash" data-index=${i}></i>
                </div>
        `
    }
    list.innerHTML = str;
}
function BMI(item){
    let height = item.heightVal / 100;
    let weight = item.weightVal;
    let bmi = (weight / Math.pow(height,2)).toFixed(2);
    switch(true){
        case bmi <=15 :
            item.body = 'superthin';
            return  "非常嚴重的體重不足";
        case  bmi >15 && bmi<=16 :
            item.body = 'verythin';
            return  '嚴重體重不足';
        case bmi >16 && bmi <=18.5 :
            item.body = 'thin';
            return  '體重過輕';
        case bmi >18.5 && bmi <=25:
            item.body = 'normal';
            return  '體重正常';
        case bmi >25 && bmi <=30:
            item.body = 'fat';
            return  '體重過重';
        case bmi >30 && bmi <=35:
            item.body = 'veryfat';
            return  '中等肥胖';
        case bmi >35 :
            item.body = 'superfat';
            return  '嚴重肥胖';
    }
}

這裡我們不使用if else 會造成效能低落
而改用switch 並回傳
由於我們是使用表達式 能接收回傳值

 let bmi = BMI(data[i]);

此時有人會好奇
Math.pow 與 toFixed是什麼
這裡我就提供 MDN的介紹啦
Math.pow : https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Math/pow
EX:
Math.pow(base, exponent)
Math.pow(2, 2) 基底2 冪方2 也就是2的2次方

toFixed: 小數點後取第幾位
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

算完BMI總共是多少 就可以開始組字串啦
這裡要注意一點
取物件裡的值有2種方式
分別為 . 與 []
[]又可以為
['字串']
[變數]
[數字] (類似陣列概念)
而我們是使用變數來取值

 let content = data[i].body;
 ${bmiStatus[content].class}

最後附上今天實作的程式碼
CodePen: https://codepen.io/wemyferb/pen/ExyxWqr
可以看看今天實做出來的成品
是不是很欣慰呢~~
明天我們將介紹如何刪除單筆資料 與多筆資料
有任何問題 或是內容有誤都可以回覆我唷!!


上一篇
JS BMI 基礎介紹(1) DAY23
下一篇
JS BMI 基礎介紹(3) DAY25
系列文
JavaScript基礎30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言