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

js對(duì)象迭代方法與性能的比較-創(chuàng)新互聯(lián)

這篇文章主要介紹了js對(duì)象迭代方法與性能的比較,具有一定借鑒價(jià)值,需要的朋友可以參考下。如下資料是關(guān)于javascript對(duì)象迭代方法的詳細(xì)內(nèi)容。

創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),桃江網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:桃江等地區(qū)。桃江做網(wǎng)站價(jià)格咨詢:028-86922220

Object.entries


返回對(duì)象所有可枚舉的鍵值對(duì),不會(huì)追尋原型鏈上的 key

let obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
Object.entries(obj).forEach(entry => {
  let key = entry[0]
  let value = entry[1]
  // entry 會(huì)是這樣 ["key1", "value1"]
})

Object.keys


返回對(duì)象所有可枚舉的鍵

let obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
Object.keys(obj).forEach(key => {
  let value = obj[key]
})

Object.values


返回對(duì)象所有可枚舉的值

let obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
Object.values(obj).forEach(value => {
  // 只能使用 value
})

for…in loop


迭代可枚舉屬性,會(huì)順著原型鏈找下去

let obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
for (const key in obj) {
  let value = obj[key]
  if (obj.hasOwnProperty(key)) {
    // 本身的
  } else {
    // 來(lái)自原型鏈的
  }
}

Object.getOwnPropertyNames


返回對(duì)象所有(包括不可枚舉)的鍵(原文說(shuō)會(huì)找原型鏈?zhǔn)清e(cuò)的)

let obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
}
Object.getOwnPropertyNames(obj).forEach(key => {
  let value = obj[key]
})

性能比較


下面的代碼用上面的幾種方法遍歷有 1000000 個(gè)屬性的對(duì)象,循環(huán) 10 次

const { PerformanceObserver, performance } = require('perf_hooks')

let objectSize = 1000000
let iterations = 10

console.log(
  'Starting performance test with %d object size and %d iterations',
  objectSize,
  iterations
)

let values = {
  ENTRIES: 0,
  KEYS: 0,
  VALUES: 0,
  FORIN: 0,
  GETOWP: 0,
}

const obs = new PerformanceObserver(items => {
  let entry = items.getEntries()[0]
  console.log(entry.name, entry.duration)
  values[entry.name] += entry.duration
  performance.clearMarks()
})
obs.observe({ entryTypes: ['measure'] })

function generateObject() {
  let obj = {}
  for (let i = 0; i < objectSize; i++) {
    obj['key' + Math.random()] = 'val' + Math.random()
  }
  return obj
}

for (let i = 0; i < iterations; i++) {
  let obj = generateObject()

  //Object.entries
  performance.mark('A')
  Object.entries(obj).forEach(entry => {
    let key = entry[0]
    let value = entry[1]
  })
  performance.mark('B')
  performance.measure('ENTRIES', 'A', 'B')

  //Object.Keys
  performance.mark('A')
  Object.keys(obj).forEach(key => {
    let value = obj[key]
  })
  performance.mark('B')
  performance.measure('KEYS', 'A', 'B')

  //Object.Values
  performance.mark('A')
  Object.values(obj).forEach(value => {})
  performance.mark('B')
  performance.measure('VALUES', 'A', 'B')

  //For In
  performance.mark('A')
  for (const key in obj) {
    let value = obj[key]
  }
  performance.mark('B')
  performance.measure('FORIN', 'A', 'B')

  //Object.getOwnPropertyNames
  performance.mark('A')
  Object.getOwnPropertyNames(obj).forEach(key => {
    let value = obj[key]
  })
  performance.mark('B')
  performance.measure('GETOWP', 'A', 'B')
}

console.log(
  Object.entries(values).sort((a, b) => {
    return a[1] - b[1]
  })
)

下面的結(jié)果是我自己跑的,順序的是指賦值的時(shí)候直接用 index,隨機(jī)則是鍵值對(duì)都插入隨機(jī)數(shù),得到的性能排序是和作者一樣的,也因?yàn)?node.js 和 chrome 都是 V8,所以這個(gè)應(yīng)該也是代表在瀏覽器上的性能排序。

// 順序
;[
  ['FORIN', 4677.321499],
  ['KEYS', 4812.776572],
  ['GETOWP', 8610.906197],
  ['VALUES', 9914.674390999999],
  ['ENTRIES', 19338.083694],
]

// 隨機(jī)
;[
  ['KEYS', 4502.579589],
  ['FORIN', 4678.013548000001],
  ['GETOWP', 8880.325031999999],
  ['VALUES', 10104.106962],
  ['ENTRIES', 17089.637588999998],
]

之前聽(tīng)說(shuō)引擎會(huì)猜測(cè)下一個(gè)值讓運(yùn)行速度更快,看數(shù)據(jù)似乎沒(méi)有太大影響。

以上就是js對(duì)象迭代方法與性能比較的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+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)景需求。

網(wǎng)頁(yè)標(biāo)題:js對(duì)象迭代方法與性能的比較-創(chuàng)新互聯(lián)
分享鏈接:http://jinyejixie.com/article26/jjojg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化微信小程序

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
深水埗区| 昭通市| 新巴尔虎右旗| 比如县| 靖宇县| 铁力市| 阳新县| 邵阳县| 兴安县| 陆川县| 临朐县| 土默特左旗| 宁陵县| 日照市| 乌兰察布市| 漯河市| 靖宇县| 茂名市| 建昌县| 大理市| 芜湖市| 凤庆县| 普陀区| 渭源县| 吉林省| 元阳县| 化德县| 池州市| 仪陇县| 搜索| 宝山区| 株洲县| 张北县| 闸北区| 安义县| 凌云县| 乐陵市| 五莲县| 密山市| 侯马市| 法库县|