Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.114 YaBrowser/20.11.1.81 Yowser/2.5 Safari/537.36
Yandex Browser 20
Windows
Desktop
4 years ago
Test name Executions per second
Reduce and Spread 34606.2 Ops/sec
ForEach and Mutate (for .. in loop) 125373.7 Ops/sec
Mutate with Object.assign 95764.9 Ops/sec
Foreach and Mutate (Object.assign) 5229.2 Ops/sec
Reduce Mutate 5551.2 Ops/sec
reduce mutate 2 97750.7 Ops/sec
reduce mutate 3 5476.4 Ops/sec
Script Preparation code:
AخA
 
var objectsArray = Array(1000).fill(() => {
  const key = Math.random().toString(36).substring(2, 5);
  const value = Math.random().toString(36).substring(2, 5);
  return {[key]: value};
});
Tests:
  • Reduce and Spread

     
    var combined = objectsArray.reduce((memo, obj) => ({...memo, ...obj}), {});
  • ForEach and Mutate (for .. in loop)

     
    var combined = {}
    objectsArray.forEach(obj => {
      for (key in obj) {
        combined[key] = obj[key];
      }
    });
  • Mutate with Object.assign

     
    var combined = Object.assign(...objectsArray)
  • Foreach and Mutate (Object.assign)

     
    var combined = {}
    objectsArray.forEach(obj => Object.assign(combined, obj));
  • Reduce Mutate

     
    var combined = objectsArray.reduce((memo, obj) => Object.assign(memo, obj), {});
  • reduce mutate 2

     
    var combined = objectsArray.reduce((acc, obj) => {
      for (key in obj) {
        acc[key] = obj[key];
      }
      return acc;
    }, {});
  • reduce mutate 3

     
    var combined = objectsArray.reduce((acc, obj) => {
      Object.keys(obj).forEach((key) => acc[key] = obj[key]);
      return acc;
    }, {});