3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
JavaScript 的陣列中,除了常用的 sort、map 以外,其實還有 every、some。這兩個方法好像比較不常用到,寫篇文來講講怎麼使用,跟什麼時候可以使用。 filter 先從 Array.filter 開始講好了,順便複習一下 ES6。假設今天有一坨資料是這樣: const students = [ { name: 'Daniel', age: 22, country: 'Malaysia' }, { name: 'Noob', age: 21, country: 'Taiwan' }, { name: 'Coin', age: 17, country: 'Taiwan', } ] 透過 ES6 的語法,搭配 filter,我們可以很輕易找出大於 18 歲的人: const result = students.filter(x => x.age >= 18); // 執行結果:result 為一個陣列,包含兩個物件。 some Array.some 是用來檢查陣列裡面是否有一些符合條件。只要有一個以上符合條件就會回傳 true,全部都不是的話會回傳 false。 例如: const result = students.some(x => x.age >= 18); // 執行結果:result 為 true const result2 = students.some(x => x.country === 'Singapore'); // 執行結果:result 為 false every Array.every 和 some 類似,不過要陣列裡面的所有東西都符合條件才會回傳 true,只要有一個不是就會回傳 false。 例如: const result = students.every(x => x.age >= 18); // 執行結果:result 為 false 使用 every、some 做表單驗證 這兩個函式平常好像不會用到,但其實 every 可以用來做後端的表單驗證。比方說註冊時前端會傳來幾個欄位:user、password、gender、name、email,然後我們使用 koa 和 koa-body這兩個套件架後端,假設這些資料存在 ctx.request.body 裡面好了。 換句話說,ctx.request.body 含有這五個欄位。 這時就可以用 every 來檢查他們是不是都含有值: if (Object.values(ctx.request.body).every(x => x !== undefined)) { // 欄位都不是空值 } else { // 有些欄位是空值 } 如果你擔心前端會少送幾個東西過來,騙過驗證的話,也可以這樣檢查: const requirements = ['user', 'password', 'gender', 'name', 'email']; if (requirements.every(x => ctx.request.body[x] !== undefined)) { // 必要的欄位都不是空值 } else { // 有些必要的欄位是空值 } 這樣就可以確保這五個欄位都不是空的了。 同樣 some 也可以用來這樣檢查。假設 facebook、twitter、github 的社群帳號他一定要有留至少一個,不能都不填的話,就可以這樣做: const socialAccounts = ['facebook', 'twitter', 'github']; if (socialAccounts.some(x => ctx.request.body[x] !== undefined)) { // 至少有填寫一個社群帳號 } else { // 完全沒有填寫社群帳號 }

本文由noobtw提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦