當 JS 學了將基本語法練習、觀念都學過之後,就開始學找實作練習,透過看老師的作法慢慢拆解每個步驟,而自己再實際撰寫語法,將每個任務完成。 而這次的練習,主要是陣列相關的操作語法,除了老師的課程帶領外,我會根據左側按鈕的功能,先除查找資料嘗試跟著撰寫相應的功能,這樣一來會使記憶更深刻。
成品
課程來源:
udemy - 20 Web Projects With Vanilla JavaScript
 forEach()來將陣列資料呈現到畫面map()計算金額的倍數filter() 篩選出符合條件的資料sort()用來排序資料reduce()計算陣列中資料的累加結果https://randomuser.me/api
  async function getRandomUser() {
  const res = await fetch('https://randomuser.me/api');  //執行完後發出promise
  const data = await res.json();
  //查看取得的資料,並從中選擇要用的部分
  //console.log(data);
  const user = data.results[0];
  //創造新的使用者,並建立新的物件
  const newUser = {
    name: `${user.name.first} ${user.name.last}`,
    money: Math.floor(Math.random() * 1000000)
  };
  console.log(newUser);
  addData(newUser);
}
data
//將新建立的物件(newUser)放入陣列中
function addData(newObj) {
  //這裡的data是在最前面所宣告的 初始陣列
  data.push(newObj);
  
    //不放入參數,使用預設data
  updateDOM();
}
forEach()來呈現畫面的資料
div並增加class給他innerHTML插入內容//將新創立的物件輸出呈現到畫面上(dom)
function updateDOM(provideData = data) {
  console.log(provideData);
  //清除main區域的div
  main.innerHTML = `<h2><strong>Person</strong>  Wealth</h2>`;
  provideData.forEach(item => {
    const element = document.createElement('div');
    //在新div增加class
    element.classList.add('person');
    element.innerHTML = `<strong>${item.name}</strong> ${item.money}`;
    main.appendChild(element);
  })
}
updateDOM()參數的回傳的資料function updateDOM(provideData) {
  console.log(provideData);
}

function updateDOM(provideData = data) {
  console.log(provideData);
}


//將回傳的隨機數字,轉換為金錢格式 -https://stackoverflow.com/questions/149055/how-to-format-numbers-as-currency-strings
function formatMoney(Money) {
  return '$' + Money.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');;
}
formatMoney()要放入剛剛forEach所傳入的金額,從這邊去調整數字的格式element.innerHTML = `<strong>${item.name}</strong>  ${formatMoney(item.money)}`;

map()建立 double money事件//double money 
function doubleMoney() {
  data = data.map(item => {
    return { ...item }
  });
  //console.log(data);
 
}

//double money 
function doubleMoney() {
  data = data.map(item => {
    return { ...item, money: item.money * 2 }
  });
  console.log(data);
}
sort來建立排名
//sortEvent
function sortEvent() {
  data = data.sort((a, b) => {
    return b.money - a.money;
  });
  //console.log(data);
  updateDOM();
}
JS 將陣列 Array 重新排列的 sort(),參考此文章來製作排名按鈕的功能。
filter篩選百萬以上的人員function filterMillionaires() {
  data = data.filter((item) => {
    return item.money > 1000000;
  });
  updateDOM();
}
reduce 的基礎語法
arr.reduce(callback[accumulator, currentValue, currentIndex, array], initialValue)
reduce()所回傳的參數資料後...accumulator += currentValue.money
//calculateMoney
function calculateMoney() {
  const reduceArr = data.reduce((accumulator, currentValue) => {
    //console.log(accumulator);
   // console.log(currentValue.money);
    return accumulator += currentValue.money;
  }, 0);
  const totalEl = document.createElement('div');
  totalEl.innerHTML = `<h3>Total Wealth: <strong> ${formatMoney(reduceArr)} </strong> </h3> `;
  main.appendChild(totalEl);
}