91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js對象迭代方法與性能的比較

發布時間:2020-06-11 09:26:39 來源:億速云 閱讀:273 作者:Leah 欄目:web開發

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

Object.entries


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

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

Object.keys


返回對象所有可枚舉的鍵

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

Object.values


返回對象所有可枚舉的值

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

for…in loop


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

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

Object.getOwnPropertyNames


返回對象所有(包括不可枚舉)的鍵(原文說會找原型鏈是錯的)

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

性能比較


下面的代碼用上面的幾種方法遍歷有 1000000 個屬性的對象,循環 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]
  })
)

下面的結果是我自己跑的,順序的是指賦值的時候直接用 index,隨機則是鍵值對都插入隨機數,得到的性能排序是和作者一樣的,也因為 node.js 和 chrome 都是 V8,所以這個應該也是代表在瀏覽器上的性能排序。

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

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

之前聽說引擎會猜測下一個值讓運行速度更快,看數據似乎沒有太大影響。

以上就是js對象迭代方法與性能比較的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双牌县| 类乌齐县| 南漳县| 宁夏| 尉犁县| 平果县| 聂拉木县| 吴江市| 宿迁市| 于田县| 襄垣县| 海宁市| 石嘴山市| 剑阁县| 韶山市| 勐海县| 莱州市| 共和县| 长阳| 类乌齐县| 融水| 蓝田县| 台中市| 嘉黎县| 邵东县| 黔南| 巴塘县| 天等县| 沛县| 吉木萨尔县| 广水市| 云和县| 若尔盖县| 荆州市| 玛纳斯县| 鹤壁市| 图木舒克市| 天门市| 奎屯市| 武邑县| 绍兴县|