JsMapReduceFilter

JavaScript performance comparison

Test case created by Gerson Dias

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
Map | Reduce | Filter
let Aluno = function(nome) {
	notas: [],
  this.nome = nome,
  this.definirNotas = function(...n) {
  	this.notas = n;
  },
  this.calcularMedia = function() {
  	return this.notas.reduce((p, c) => p + c) / this.notas.length;	
  }
}

let joao = new Aluno('joao');
let pedro = new Aluno('pedro');
let bruna = new Aluno('bruna');

joao.definirNotas(1, 4, 7);
pedro.definirNotas(5, 8, 9);
bruna.definirNotas(10, 6, 10);

let alunos = [joao, pedro, bruna];

let alunosAprovados = alunos.filter(el => el.calcularMedia() >= 7);
let alunosReprovados = alunos.filter(el => el.calcularMedia() < 7);

let mediaDosAlunosAprovados = alunosAprovados.map(el => el.notas.reduce((p, e) => p + e)).reduce((p, e) => p + e) / alunosAprovados.map(el => el.notas.length).reduce((p, e) => p + e);

let mediaDosAlunosReprovados =
alunosReprovados.map(el => el.notas.reduce((p, e) => p + e)).reduce((p, e) => p + e) / alunosReprovados.map(el => el.notas.length).reduce((p, e) => p + e);


console.log('Os alunos aprovados foram: ' + alunosAprovados.map(x => x.nome));//[Pedro, Bruna]
console.log('A média dos alunos aprovados foi: ' + mediaDosAlunosAprovados);//8
console.log('A média dos alunos reprovados foi: ' + mediaDosAlunosReprovados);//4
console.log('Os alunos aprovados tiveram uma média de notas ' + ((mediaDosAlunosReprovados /mediaDosAlunosAprovados) * 100) + '%' + ' superior aos alunos reprovados');//50%
pending…
For
let Aluno = function(nome) {
	notas: [],
  this.nome = nome,
  this.definirNotas = function(...n) {
  	this.notas = n;
  },
  this.calcularMedia = function() {
  	return this.notas.reduce((p, c) => p + c) / this.notas.length;	
  }
}

let joao = new Aluno('joao');
let pedro = new Aluno('pedro');
let bruna = new Aluno('bruna');

joao.definirNotas(1, 4, 7);
pedro.definirNotas(5, 8, 9);
bruna.definirNotas(10, 6, 10);

let alunos = [joao, pedro, bruna];

let alunosAprovados = [];
let alunosReprovados = [];

for (let i = 0; i < alunos.length; i++) {
	if (alunos[i].calcularMedia() < 7) {
  	alunosReprovados.push(alunos[i]);
  } else {
  	alunosAprovados.push(alunos[i]);
  }
}

let mediaDosAlunosAprovados = 0;

for (let i = 0; i < alunosAprovados.length; i++){
	let mediaAluno = 0;
  for (let n = 0; n < alunosAprovados[i].notas.length; n++){
  	 mediaAluno += alunosAprovados[i].notas[n];
  }
  
  mediaAluno = mediaAluno / alunosAprovados[i].notas.length;
  mediaDosAlunosAprovados += mediaAluno;
}

mediaDosAlunosAprovados = mediaDosAlunosAprovados / alunosAprovados.length;

let mediaDosAlunosReprovados = 0;

for (let i = 0; i < alunosReprovados.length; i++){
	let mediaAluno = 0;
  for (let n = 0; n < alunosReprovados[i].notas.length; n++){
  	 mediaAluno += alunosReprovados[i].notas[n];
  }
  
  mediaAluno = mediaAluno / alunosReprovados[i].notas.length;
  mediaDosAlunosReprovados += mediaAluno;
}

mediaDosAlunosReprovados = mediaDosAlunosReprovados / alunosReprovados.length;

console.log('Os alunos aprovados foram: ' + alunosAprovados.map(x => x.nome));//[Pedro, Bruna]
console.log('A média dos alunos aprovados foi: ' + mediaDosAlunosAprovados);//8
console.log('A média dos alunos reprovados foi: ' + mediaDosAlunosReprovados);//4
console.log('Os alunos aprovados tiveram uma média de notas ' + ((mediaDosAlunosReprovados /mediaDosAlunosAprovados) * 100) + '%' + ' superior aos alunos reprovados');//50%
pending…
Prototype
let Aluno = function(nome) {
	notas: [],
  this.nome = nome,
  this.definirNotas = function(...n) {
  	this.notas = n;
  },
  this.calcularMedia = function() {
  	return this.notas.reduce((p, c) => p + c) / this.notas.length;	
  }
}

let joao = new Aluno('joao');
let pedro = new Aluno('pedro');
let bruna = new Aluno('bruna');

joao.definirNotas(1, 4, 7);
pedro.definirNotas(5, 8, 9);
bruna.definirNotas(10, 6, 10);

let alunos = [joao, pedro, bruna];

let alunosAprovados = alunos.filter(el => el.calcularMedia() >= 7);
let alunosReprovados = alunos.filter(el => el.calcularMedia() < 7);

Array.prototype.sum = function(property) {
    return this.map(el => el[property].reduce((p, e) => p + e, 0)).reduce((p, e) => p + e, 0);
}

Array.prototype.count = function(property) {
    return this.map(el => el[property].length).reduce((p, e) => p + e, 0);    
}

let mediaDosAlunosAprovados = alunosAprovados.sum('notas') / alunosAprovados.count('notas')

let mediaDosAlunosReprovados = alunosReprovados.sum('notas') / alunosReprovados.count('notas')


console.log('Os alunos aprovados foram: ' + alunosAprovados.map(x => x.nome));//[Pedro, Bruna]
console.log('A média dos alunos aprovados foi: ' + mediaDosAlunosAprovados);//8
console.log('A média dos alunos reprovados foi: ' + mediaDosAlunosReprovados);//4
console.log('Os alunos aprovados tiveram uma média de notas ' + ((mediaDosAlunosReprovados /mediaDosAlunosAprovados) * 100) + '%' + ' superior aos alunos reprovados');//50%
pending…

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

0 Comments