這些技巧可能大家大部分都用過(guò)了,如果用過(guò)就當(dāng)作加深點(diǎn)映像,如果沒(méi)有遇到過(guò),就當(dāng)作學(xué)會(huì)了幾個(gè)技巧。1. 確保數(shù)組值使用 grid ,需要重新創(chuàng)建原始數(shù)據(jù),并且每行的列長(zhǎng)度可能不匹配, 為了確保不匹配行之間的長(zhǎng)度相等,可以使用Array.fill方法。let array = Array(5).fill('');console.log(array); // outputs (5) ['', '', '', '', '']
2. 獲取數(shù)組唯一值ES6 提供了從數(shù)組中提取惟一值的兩種非常簡(jiǎn)潔的方法。不幸的是,它們不能很好地處理非基本類(lèi)型的數(shù)組。在本文中,主要關(guān)注基本數(shù)據(jù)類(lèi)型。const cars = [ 'Mazda', 'Ford', 'Renault', 'Opel', 'Mazda']const uniqueWithArrayFrom = Array.from(new Set(cars));console.log(uniqueWithArrayFrom); // outputs ['Mazda', 'Ford', 'Renault', 'Opel']
const uniqueWithSpreadOperator = [...new Set(cars)];console.log(uniqueWithSpreadOperator);// outputs ['Mazda', 'Ford', 'Renault', 'Opel']
3.使用展開(kāi)運(yùn)算符合并對(duì)象和對(duì)象數(shù)組對(duì)象合并是很常見(jiàn)的事情,我們可以使用新的ES6特性來(lái)更好,更簡(jiǎn)潔的處理合并的過(guò)程。// merging objectsconst product = { name: 'Milk', packaging: 'Plastic', price: '5$' }const manufacturer = { name: 'Company Name', address: 'The Company Address' }
const productManufacturer = { ...product, ...manufacturer };console.log(productManufacturer); // outputs { name: 'Company Name', packaging: 'Plastic', price: '5$', address: 'The Company Address' }
// merging an array of objects into oneconst cities = [ { name: 'Paris', visited: 'no' }, { name: 'Lyon', visited: 'no' }, { name: 'Marseille', visited: 'yes' }, { name: 'Rome', visited: 'yes' }, { name: 'Milan', visited: 'no' }, { name: 'Palermo', visited: 'yes' }, { name: 'Genoa', visited: 'yes' }, { name: 'Berlin', visited: 'no' }, { name: 'Hamburg', visited: 'yes' }, { name: 'New York', visited: 'yes' }];
const result = cities.reduce((accumulator, item) => { return { ...accumulator, [item.name]: item.visited }}, {});
console.log(result);/* outputsBerlin: 'no'Genoa: 'yes'Hamburg: 'yes'Lyon: 'no'Marseille: 'yes'Milan: 'no'New York: 'yes'Palermo: 'yes'Paris: 'no'Rome: 'yes'*/
4. 數(shù)組 map 的方法 (不使用Array.Map)另一種數(shù)組 map 的實(shí)現(xiàn)的方式,不用 Array.map。Array.from 還可以接受第二個(gè)參數(shù),作用類(lèi)似于數(shù)組的map方法,用來(lái)對(duì)每個(gè)元素進(jìn)行處理,將處理后的值放入返回的數(shù)組。如下:const cities = [ { name: 'Paris', visited: 'no' }, { name: 'Lyon', visited: 'no' }, { name: 'Marseille', visited: 'yes' }, { name: 'Rome', visited: 'yes' }, { name: 'Milan', visited: 'no' }, { name: 'Palermo', visited: 'yes' }, { name: 'Genoa', visited: 'yes' }, { name: 'Berlin', visited: 'no' }, { name: 'Hamburg', visited: 'yes' }, { name: 'New York', visited: 'yes' }];const cityNames = Array.from(cities, ({ name}) => name);console.log(cityNames);// outputs ['Paris', 'Lyon', 'Marseille', 'Rome', 'Milan', 'Palermo', 'Genoa', 'Berlin', 'Hamburg', 'New York']
5. 有條件的對(duì)象屬性不再需要根據(jù)一個(gè)條件創(chuàng)建兩個(gè)不同的對(duì)象,可以使用展開(kāi)運(yùn)算符號(hào)來(lái)處理。nst getUser = (emailIncluded) => { return { name: 'John', surname: 'Doe', ...emailIncluded && { email : 'john@doe.com' } }}const user = getUser(true);console.log(user); // outputs { name: 'John', surname: 'Doe', email: 'john@doe.com' }const userWithoutEmail = getUser(false);console.log(userWithoutEmail); // outputs { name: 'John', surname: 'Doe' }
6. 解構(gòu)原始數(shù)據(jù)有時(shí)候一個(gè)對(duì)象包含很多屬性,而我們只需要其中的幾個(gè),這里可以使用解構(gòu)方式來(lái)提取我們需要的屬性。如一個(gè)用戶對(duì)象內(nèi)容如下:const rawUser = { name: 'John', surname: 'Doe', email: 'john@doe.com', displayName: 'SuperCoolJohn', joined: '2016-05-05', image: 'path-to-the-image', followers: 45 ...} 我們需要提取出兩個(gè)部分,分別是用戶及用戶信息,這時(shí)可以這樣做:let user = {}, userDetails = {};({ name: user.name, surname: user.surname, ...userDetails } = rawUser);
console.log(user); // outputs { name: 'John', surname: 'Doe' }console.log(userDetails); // outputs { email: 'john@doe.com', displayName: 'SuperCoolJohn', joined: '2016-05-05', image: 'path-to-the-image', followers: 45 }
7. 動(dòng)態(tài)屬性名早期,如果屬性名需要是動(dòng)態(tài)的,我們首先必須聲明一個(gè)對(duì)象,然后分配一個(gè)屬性。這些日子已經(jīng)過(guò)去了,有了ES6特性,我們可以做到這一點(diǎn)。const dynamic = 'email';let user = { name: 'John', [dynamic]: 'john@doe.com'}console.log(user); // outputs { name: 'John', email: 'john@doe.com' }
8.字符串插值在用例中,如果正在構(gòu)建一個(gè)基于模板的helper組件,那么這一點(diǎn)就會(huì)非常突出,它使動(dòng)態(tài)模板連接容易得多。const user = { name: 'John', surname: 'Doe', details: { email: 'john@doe.com', displayName: 'SuperCoolJohn', joined: '2016-05-05', image: 'path-to-the-image', followers: 45 }}const printUserInfo = (user) => { const text = `The user is ${user.name} ${user.surname}. Email: ${user.details.email}. Display Name: ${user.details.displayName}. ${user.name} has ${user.details.followers} followers.` console.log(text);}
printUserInfo(user);// outputs 'The user is John Doe. Email: john@doe.com. Display Name: SuperCoolJohn. John has 45 followers.'
|