JavaScript對(duì)象Rest和Spread的使用方法?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
成都創(chuàng)新互聯(lián)的客戶來自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都做網(wǎng)站、成都網(wǎng)站建設(shè)、電商網(wǎng)站開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā)。Rest 和 Spread 操作符不僅僅可以用于讓參數(shù)休息和擴(kuò)展數(shù)組。
下面針對(duì) JavaScript 對(duì)象時(shí)使用 Rest 和 Spread 時(shí)的 7 個(gè)鮮為人知的技巧。
添加屬性
克隆一個(gè)對(duì)象,同時(shí)向(淺)克隆對(duì)象添加附加屬性。
在這個(gè)示例中,user 被克隆,password 屬性被添加到 userWithPass 中。
const user = { id: 100, name: 'Howard Moon'} const userWithPass = { ...user, password: 'Password!' } user //=> { id: 100, name: 'Howard Moon' } userWithPass //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
對(duì)象合并
將兩個(gè)對(duì)象合并到一個(gè)新對(duì)象中。
將 Part1 和 Part2 合并到 user1中。
const part1 = { id: 100, name: 'Howard Moon' } const part2 = { id: 100, password: 'Password!' } const user1 = { ...part1, ...part2 } //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
對(duì)象也可以使用以下語法合并:
const partial = { id: 100, name: 'Howard Moon' } const user = { ...partial, id: 100, password: 'Password!' } user //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
排除對(duì)象屬性
可以結(jié)合使用解構(gòu) rest 運(yùn)算符刪除屬性。 在這里,password 被刪除 ,其余的屬性作為 rest 返回。
const noPassword = ({ password, ...rest }) => rest const user = { id: 100, name: 'Howard Moon', password: 'Password!' } noPassword(user) //=> { id: 100, name: 'Howard moon' }
動(dòng)態(tài)排除屬性
函數(shù)接受一個(gè) prop 作為參數(shù)。使用計(jì)算對(duì)象屬性名稱,可以從克隆中動(dòng)態(tài)地刪除屬性。
const user1 = { id: 100, name: 'Howard Moon', password: 'Password!' } const removeProperty = prop => ({ [prop]: _, ...rest }) => rest // ---- ------ // \ / // dynamic destructuring const removePassword = removeProperty('password') const removeId = removeProperty('id') removePassword(user1) //=> { id: 100, name: 'Howard Moon' } removeId(user1) //=> { name: 'Howard Moon', password: 'Password!' }
對(duì)屬性進(jìn)行排序
有時(shí)性質(zhì)并不按照我們需要的順序排列。 使用一些技巧,我們可以將屬性推到列表的頂部,或者將它們移到底部。
若要將 id 移動(dòng)到第一個(gè)位置,在擴(kuò)展對(duì)象之前將 id: undefined 添加到新的 Object 最前面。
const user3 = { password: 'Password!', name: 'Naboo', id: 300 } const organize = object => ({ id: undefined, ...object }) // ------------- // / // move id to the first property organize(user3) //=> { id: 300, password: 'Password!', name: 'Naboo' }
若要將 password 移到最后一個(gè)屬性,請(qǐng)從對(duì)象中解構(gòu) password。然后在使用 Rest 操作符后重新設(shè)置 password 屬性。
const user3 = { password: 'Password!', name: 'Naboo', id: 300 } const organize = ({ password, ...object }) => ({ ...object, password }) // -------- // / // move password to last property organize(user3) //=> { name: 'Naboo', id: 300, password: 'Password!' }
默認(rèn)屬性
默認(rèn)屬性是僅當(dāng)它們不包含在原始對(duì)象中時(shí)才設(shè)置的值。
在本例中,user2 不包含 quotes 屬性。 setdefaults 函數(shù)確保所有對(duì)象都設(shè)置了 quotes 屬性,否則它將被設(shè)置為[]。
當(dāng)調(diào)用 setDefaults (user2)時(shí),返回值將包含 quotes 屬性: []。
在調(diào)用 setDefaults (user4)時(shí),因?yàn)?user4 已經(jīng)有了 quotes 屬性,所以不會(huì)修改該屬性。
const user2 = { id: 200, name: 'Vince Noir' } const user4 = { id: 400, name: 'Bollo', quotes: ["I've got a bad feeling about this..."] } const setDefaults = ({ quotes = [], ...object}) => ({ ...object, quotes }) setDefaults(user2) //=> { id: 200, name: 'Vince Noir', quotes: [] } setDefaults(user4) //=> { //=> id: 400, //=> name: 'Bollo', //=> quotes: ["I've got a bad feeling about this..."] //=> }
如果你希望默認(rèn)值先出現(xiàn)而不是后出現(xiàn),也可以這樣寫:
const setDefaults = ({ ...object}) => ({ quotes: [], ...object })
屬性重命名
通過結(jié)合上面的技術(shù),可以創(chuàng)建一個(gè)函數(shù)來重命名屬性。
假設(shè)有一些大寫 ID 的對(duì)象屬性名應(yīng)該是小寫的 id。 首先從對(duì)象解構(gòu) ID 然后在對(duì)象 Spread 時(shí)將其作為 id 添加回去。
const renamed = ({ ID, ...object }) => ({ id: ID, ...object }) const user = { ID: 500, name: "Bob Fossil" } renamed(user) //=> { id: 500, name: 'Bob Fossil' }
附贈(zèng):添加條件屬性
感謝 @vinialbano 指出你也可以有條件地添加屬性。 在這個(gè)例子中,只有當(dāng) password 是真實(shí)的時(shí)候才會(huì)添加 password!
const user = { id: 100, name: 'Howard Moon' } const password = 'Password!' const userWithPassword = { ...user, id: 100, ...(password && { password }) } userWithPassword //=> { id: 100, name: 'Howard Moon', password: 'Password!' }
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)JavaScript對(duì)象Rest和Spread的使用方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:JavaScript對(duì)象Rest和Spread的使用方法-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article36/gdosg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、做網(wǎng)站、虛擬主機(jī)、網(wǎng)站策劃、品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容