簡體   English   中英

Javascript:對象數組到包含值數組的對象-最有效的方式?

[英]Javascript: Array of objects to object containing arrays of values - most performant way?

所需:循環訪問單個對象數組,並以最簡潔和高效的方式根據對象中的鍵構造多個數組以分配給對象。 兩種方法:

一:

const arrayOfObjectsToObjectOfArraysOfValues = items => {
  const newArrayOne = []
  const newArrayTwo = []
  const newArrayThree = []

  items.forEach(({ value1, value2, value3 }) => {
    newArrayOne.push(value1)
    newArrayTwo.push(value2)
    newArrayThree.push(value3)
  })

  return { newArrayOne, newArrayTwo, newArrayThree }
}

二:

const arrayOfObjectsToObjectOfArraysOfValues = items => ({
   newArrayOne: items.map(({ value1 }) => value1),
   newArrayTwo: items.map(({ value2 }) => value2),
   newArrayThree: items.map(({ value3 }) => value3),
})

編輯(也有此選項):

const arrayOfObjectsToObjectOfArraysOfValues = items => {
  return items.reduce((r, { value1, value2, value3 }, i) => {
    r.newArrayOne[i] = value1;
    r.newArrayTwo[i] = value2;
    r.newArrayThree[i] = value3;
    return r;
  }, { newArrayOne: [], newArrayTwo: [], newArrayThree: [] });
}

顯然,第二個循環更簡潔,但是在只需要一個循環的情況下進行三個循環就可以批評它了。 另一方面,第一個循環每個循環執行3次操作。 關鍵問題選項是“哪個(或另一個更優雅)選項(哪個)表現最出色?”

好的,我是第一次上jsperf潮流……看起來答案就在這里,這取決於客戶端:

https://jsperf.com/arrayofobjectstoobjectofarraysofvalues/1

在Firefox上,選項1慢23%。 (每秒832,000次基准操作)
在Chrome上,選項2慢88%。 (每秒248,000次基准操作)
在Safari上,選項2慢48%。 (每秒158,000次操作基准)

編輯:減少選項在Chrome和Safari中慢2%,但在Firefox中慢50%。

因此,可能是的,在大多數情況下,選項1更好。 為了簡潔起見,還真可惜...另外,使用Firefox-太快了!

最后,我認為使用reduce可以使選項一變得簡明扼要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM