一坚芜、關于取值
取值在程序中非常常見虑稼,比如從對象obj中取值恬涧。
const obj = {
a:1,
b:2,
c:3,
d:4,
e:5,
}
吐槽:
const a = obj.a;
const b = obj.b;
const c = obj.c;
const d = obj.d;
const e = obj.e;
或者
const f = obj.a + obj.d;
const g = obj.c + obj.e;
吐槽:“不會用ES6的解構賦值來取值嗎灿里?5行代碼用1行代碼搞定不香嗎忱详?直接用對象名加屬性名去取值骑晶,要是對象名短還好,很長呢刺桃?搞得代碼中到處都是這個對象名粹淋≈豆簦”
改進:
const {a,b,c,d,e} = obj;
const f = a + d;
const g = c + e;
反駁
不是不用ES6的解構賦值避凝,而是服務端返回的數(shù)據(jù)對象中的屬性名不是我想要的,這樣取值蹂析,不是還得重新創(chuàng)建個遍歷賦值葛碧。
吐槽
看來你對ES6的解構賦值掌握的還是不夠徹底借杰。如果想創(chuàng)建的變量名和對象的屬性名不一致,可以這么寫:
const {a:a1} = obj;
console.log(a1);// 1
補充
ES6的解構賦值雖然好用进泼。但是要注意解構的對象不能為undefined蔗衡、null。否則會報錯乳绕,故要給被解構的對象一個默認值绞惦。
const {a,b,c,d,e} = obj || {};
二、關于合并數(shù)據(jù)的
比如合并兩個數(shù)組刷袍,合并兩個對象。
const a = [1,2,3];
const b = [1,5,6];
const c = a.concat(b);//[1,2,3,1,5,6]
const obj1 = {
a:1,
}
const obj2 = {
b:1,
}
const obj = Object.assign({}, obj1, obj2);//{a:1,b:1}
吐槽
ES6的擴展運算符是不是忘記了樊展,還有數(shù)組的合并不考慮去重嗎呻纹?
改進
const a = [1,2,3];
const b = [1,5,6];
const c = [...new Set([...a,...b])];//[1,2,3,5,6]
const obj1 = {
a:1,
}
const obj2 = {
b:1,
}
const obj = {...obj1,...obj2};//{a:1,b:1}
三、關于拼接字符串
const name = '小明';
const score = 59;
let result = '';
if(score > 60){
result = `${name}的考試成績及格`;
}else{
result = `${name}的考試成績不及格`;
}
吐槽
像你們這樣用ES6字符串模板专缠,還不如不用雷酪,你們根本不清楚在${}中可以做什么操作。在${}中可以放入任意的JavaScript表達式涝婉,可以進行運算哥力,以及引用對象屬性。
改進
const name = '小明';
const score = 59;
const result = `${name}${score > 60?'的考試成績及格':'的考試成績不及格'}`;
四墩弯、關于if中判斷條件
if(
type == 1 ||
type == 2 ||
type == 3 ||
type == 4 ||
){
//...
}
吐槽
ES6中數(shù)組實例方法includes會不會使用呢吩跋?
改進
const condition = [1,2,3,4];
if( condition.includes(type) ){
//...
}
五、關于列表搜索的
在項目中渔工,一些沒分頁的列表的搜索功能由前端來實現(xiàn)锌钮,搜索一般分為精確搜索和模糊搜索。搜索也要叫過濾引矩,一般用filter來實現(xiàn)梁丘。
const a = [1,2,3,4,5];
const result = a.filter(
item =>{
return item === 3
}
)
吐槽
如果是精確搜索不會用ES6中的find嗎侵浸?性能優(yōu)化懂么,find方法中找到符合條件的項氛谜,就不會繼續(xù)遍歷數(shù)組掏觉。
改進
const a = [1,2,3,4,5];
const result = a.find(
item =>{
return item === 3
}
)
六、關于扁平化數(shù)組的
一個部門JSON數(shù)據(jù)中值漫,屬性名是部門id澳腹,屬性值是個部門成員id數(shù)組集合,現(xiàn)在要把有部門的成員id都提取到一個數(shù)組集合中惭嚣。
const deps = {
'采購部':[1,2,3],
'人事部':[5,8,12],
'行政部':[5,14,79],
'運輸部':[3,64,105],
}
let member = [];
for (let item in deps){
const value = deps[item];
if(Array.isArray(value)){
member = [...member,...value]
}
}
member = [...new Set(member)]
吐槽
獲取對象的全部屬性值還要遍歷嗎遵湖?Object.values忘記了嗎?還有涉及到數(shù)組的扁平化處理晚吞,為啥不用ES6提供的flat方法呢延旧,還好這次的數(shù)組的深度最多只到2維,還要是遇到4維槽地、5維深度的數(shù)組迁沫,是不是得循環(huán)嵌套循環(huán)來扁平化?
改進
const deps = {
'采購部':[1,2,3],
'人事部':[5,8,12],
'行政部':[5,14,79],
'運輸部':[3,64,105],
}
let member = Object.values(deps).flat(Infinity);
其中使用Infinity作為flat的參數(shù)捌蚊,使得無需知道被扁平化的數(shù)組的維度集畅。
補充
flat方法不支持IE瀏覽器。