亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯]使用 JavaScript 對(duì)象 Rest 和 Spread 的7個(gè)技巧

alexnevsky / 1177人閱讀

摘要:下面針對(duì)對(duì)象時(shí)使用和時(shí)的個(gè)鮮為人知的技巧。對(duì)屬性進(jìn)行排序有時(shí)性質(zhì)并不按照我們需要的順序排列。若要將移到最后一個(gè)屬性,請(qǐng)從對(duì)象中解構(gòu)。默認(rèn)屬性默認(rèn)屬性是僅當(dāng)它們不包含在原始對(duì)象中時(shí)才設(shè)置的值。

[譯]使用 JavaScript 對(duì)象 Rest 和 Spread 的7個(gè)技巧

原文作者:Joel Thoms

原文標(biāo)題:7 Tricks with Resting and Spreading JavaScript Objects

原文:https://blog.bitsrc.io/6-tric...

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ì)象也可以使用以下語(yǔ)法合并:

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 })
屬性重命名

通過(guò)結(jié)合上面的技術(shù),可以創(chuàng)建一個(gè)函數(shù)來(lái)重命名屬性。

假設(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!" }
摘要

我試著列出了一些鮮為人知的 Spread 和 Rest 技巧,如果你知道任何我沒(méi)有列在這里技巧,請(qǐng)?jiān)谠u(píng)論區(qū)里讓每個(gè)人都知道!如果你從中學(xué)到了新的東西,請(qǐng)?jiān)?Twitter 上和你的朋友分享,這真的很有幫助!

請(qǐng)?jiān)谶@里或者推特 @joelnet 關(guān)注我!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102836.html

相關(guān)文章

  • ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解

    摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代開(kāi)發(fā)語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對(duì)未聲明的變量賦值。按值傳遞中函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...

    snowLu 評(píng)論0 收藏0
  • VUE es6技巧寫法(持續(xù)更新中~~~)

    摘要:如果添加屬性不可避免,要使用方法。如果對(duì)象的屬性名是動(dòng)態(tài)的,可以在創(chuàng)造對(duì)象的時(shí)候,使用屬性表達(dá)式定義。 一些稍微優(yōu)雅的技巧寫法,并不是非的是es6,標(biāo)題黨了哈 為class綁定多個(gè)值 普通寫法 :class={a: true, b: true} 其他 :class=[btn, btn2, {a: true, b: false}] 一個(gè)值判斷a或者判斷b 普通寫法 if(flg === ...

    y1chuan 評(píng)論0 收藏0
  • 個(gè)JavaScript開(kāi)發(fā)人員都應(yīng)該知道新ES2018功能(文)

    摘要:為了使程序員能夠一次一個(gè)地處理集合中的元素,引入了迭代器接口。迭代器使用該方法獲取對(duì)象屬性名稱的數(shù)組,然后將其分配給常量。迭代器的缺點(diǎn)是它們不適合表示異步數(shù)據(jù)源。每次循環(huán)時(shí),都會(huì)調(diào)用迭代器的方法,它返回一個(gè)。 前言 原文地址:https://css-tricks.com/new-es2018-features-every-javascript-developer-should-kno...

    leonardofed 評(píng)論0 收藏0
  • 2017-07-25 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選三思而后行想提高團(tuán)隊(duì)技術(shù),來(lái)試試這個(gè)套路如何開(kāi)發(fā)一個(gè)插件學(xué)習(xí)筆記塊級(jí)作用域綁定譯文詳解帶來(lái)的個(gè)重大變化中文周二放送畫(huà)圖知乎專欄第期新特性譯配置譯高性能視差滾動(dòng)行代碼構(gòu)建區(qū)塊鏈知乎專欄渲染器修仙之路之拷貝對(duì)象已 2017-07-25 前端日?qǐng)?bào) 精選 SSR 三思而后行想提高團(tuán)隊(duì)技術(shù),來(lái)試試這個(gè)套路!如何開(kāi)發(fā)一個(gè) Atom 插件ES6學(xué)習(xí)筆記:塊級(jí)作用域綁定【譯文】詳解VUE2...

    bluesky 評(píng)論0 收藏0
  • ES6對(duì)函數(shù)改動(dòng)

    摘要:改動(dòng)函數(shù)的改變不算太大,都是一些其他語(yǔ)言早就有的功能,而一直比較欠缺的,比如函數(shù)參數(shù)默認(rèn)值,任意參數(shù)的表示法,最大的變化應(yīng)該是支持箭頭函數(shù)其他語(yǔ)言稱之為表達(dá)式,一種對(duì)匿名函數(shù)的一種簡(jiǎn)寫方式,以下來(lái)探討一下函數(shù)在中的一些改變默認(rèn)參數(shù)任意參數(shù)操 ES6 functions改動(dòng) ????ES6函數(shù)的改變不算太大,都是一些其他語(yǔ)言早就有的功能,而Javascript一直比較欠缺的,比如函數(shù)參數(shù)...

    kk_miles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<