成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JavaScript對象Rest和Spread的使用方法

JavaScript對象Rest和Spread的使用方法?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

大理州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

Rest 和 Spread 操作符不僅僅可以用于讓參數(shù)休息和擴展數(shù)組。

下面針對 JavaScript 對象時使用 Rest 和 Spread 時的 7 個鮮為人知的技巧。

添加屬性

克隆一個對象,同時向(淺)克隆對象添加附加屬性。

在這個示例中,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!' }

對象合并

將兩個對象合并到一個新對象中。

將 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!' }

對象也可以使用以下語法合并:

const partial = { id: 100, name: 'Howard Moon' }
const user = { ...partial, id: 100, password: 'Password!' }

user //=> { id: 100, name: 'Howard Moon', password: 'Password!' }

排除對象屬性

可以結(jié)合使用解構(gòu) rest 運算符刪除屬性。 在這里,password 被刪除 ,其余的屬性作為 rest 返回。

const noPassword = ({ password, ...rest }) => rest
const user = {
  id: 100,
  name: 'Howard Moon',
  password: 'Password!'
}

noPassword(user) //=> { id: 100, name: 'Howard moon' }

動態(tài)排除屬性

函數(shù)接受一個 prop 作為參數(shù)。使用計算對象屬性名稱,可以從克隆中動態(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!' }

對屬性進行排序

有時性質(zhì)并不按照我們需要的順序排列。 使用一些技巧,我們可以將屬性推到列表的頂部,或者將它們移到底部。

若要將 id 移動到第一個位置,在擴展對象之前將 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ò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)它們不包含在原始對象中時才設(shè)置的值。

在本例中,user2 不包含 quotes 屬性。 setdefaults 函數(shù)確保所有對象都設(shè)置了 quotes 屬性,否則它將被設(shè)置為[]。

當(dāng)調(diào)用 setDefaults (user2)時,返回值將包含 quotes 屬性: []。

在調(diào)用 setDefaults (user4)時,因為 user4 已經(jīng)有了 quotes 屬性,所以不會修改該屬性。

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)建一個函數(shù)來重命名屬性。

假設(shè)有一些大寫 ID 的對象屬性名應(yīng)該是小寫的 id。 首先從對象解構(gòu) ID 然后在對象 Spread 時將其作為 id 添加回去。

const renamed = ({ ID, ...object }) => ({ id: ID, ...object })

const user = {
  ID: 500,
  name: "Bob Fossil"
}

renamed(user) //=> { id: 500, name: 'Bob Fossil' }

附贈:添加條件屬性

感謝 @vinialbano 指出你也可以有條件地添加屬性。 在這個例子中,只有當(dāng) password 是真實的時候才會添加 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)容,你們對JavaScript對象Rest和Spread的使用方法大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:JavaScript對象Rest和Spread的使用方法
網(wǎng)站URL:http://jinyejixie.com/article26/jopejg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、手機網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)站改版、云服務(wù)器定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
满洲里市| 平和县| 通山县| 三台县| 泗阳县| 民乐县| 新巴尔虎右旗| 广灵县| 岳池县| 通榆县| 汕尾市| 高淳县| 祁门县| 蕲春县| 博罗县| 遵义县| 建水县| 宽城| 通化市| 扎赉特旗| 常山县| 巴林左旗| 乐陵市| 江油市| 肥城市| 讷河市| 天水市| 永胜县| 射阳县| 札达县| 江西省| 宁武县| 遵义市| 福海县| 元谋县| 襄垣县| 芜湖市| 信阳市| 平塘县| 棋牌| 北票市|