ES6 vs ES5 recursion

Benchmark created on


Setup

const sessions = [
      [
          {
              "name": "TotallyMoney.Basin.PageView",
              "parentName": null,
              "payload": {
                  "created": "2017-02-10 10:00:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.Visit",
              "parentName": "TotallyMoney.Basin.PageView",
              "payload": {
                  "created": "2017-02-10 10:01:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.PageView",
              "parentName": "TotallyMoney.Basin.Visit",
              "payload": {
                  "created": "2017-02-10 10:02:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormValidation",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 10:03:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormValidation",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 10:04:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormSubmit",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 10:04:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.PostClick",
              "parentName": "TotallyMoney.CreditCards.FormSubmit",
              "payload": {
                  "created": "2017-02-10 10:05:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.PostClick",
              "parentName": "TotallyMoney.CreditCards.FormSubmit",
              "payload": {
                  "created": "2017-02-10 10:06:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormValidation",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 10:07:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormSubmit",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 10:08:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.PostClick",
              "parentName": "TotallyMoney.CreditCards.FormSubmit",
              "payload": {
                  "created": "2017-02-10 10:09:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.PostClick",
              "parentName": "TotallyMoney.CreditCards.FormSubmit",
              "payload": {
                  "created": "2017-02-10 10:10:00",
                  "sessionId": "cafebabe-cafe-babe-cafe-babecafebabe"
              }
          }
      ],
      [
          {
              "name": "TotallyMoney.CreditCards.Visit",
              "parentName": "TotallyMoney.Basin.PageView",
              "payload": {
                  "created": "2017-02-10 11:01:00",
                  "sessionId": "deadbeef-dead-beef-dead-beefdeadbeef"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormValidation",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 11:02:00",
                  "sessionId": "deadbeef-dead-beef-dead-beefdeadbeef"
              }
          },
          {
              "name": "TotallyMoney.CreditCards.FormSubmit",
              "parentName": "TotallyMoney.CreditCards.Visit",
              "payload": {
                  "created": "2017-02-10 11:03:00",
                  "sessionId": "deadbeef-dead-beef-dead-beefdeadbeef"
              }
          }
      ]
  ]

Test runner

Ready to run.

Testing in
TestOps/sec
ES5 function
function es5Tree(events, parentName = null) {
	return {
		name: parentName,
		children: events.filter(e => e.parentName === parentName).map(e => es5Tree(events, e.name)),
	}
}

const es5Trees = sessions.map(session => es5Tree(session, session[0].parentName))

console.log(es5Trees)
ready
ES6 function
const es6Tree = (events, parentName = null) => ({
	name: parentName,
	children: events.filter(e => e.parentName === parentName).map(e => es6Tree(events, e.name)),
})

const es6Trees = sessions.map(session => es6Tree(session, session[0].parentName))

console.log(es6Trees)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.