JavaScript:包含值数组的对象的对象数组 - 大多数性能的方式



所需的所需:循环在一个对象上,并根据这些对象的键以最简洁和绩效的方式构造多个用于分配给对象的数组。两种方法:

一:

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 bandwagon ...看起来答案是在这里取决于客户:

https://jsperf.com/arrayofobjectStoobjectObjectOfaraysOfvalues/1

Firefox选项1慢23%。(每隔832,000个OPS)
在Chrome选项上2慢了88%。(每隔248,000个OPS)
在Safari上,选项2速度慢48%。(每秒158,000 OPS)

编辑:减少选项在Chrome&野生动物园,但在Firefox中慢50%。

所以,可能是,在大多数情况下,选项1更好。可惜的是简洁...另外,去Firefox-太快了!

最后,我想选项可以使用Realding成为一个小关注者。

最新更新