當 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);
}