Skip to content

Instantly share code, notes, and snippets.

@viniceosm
Last active May 3, 2018 16:37
Show Gist options
  • Save viniceosm/b9efa860eaa6e899f0fcd8edd02c9c43 to your computer and use it in GitHub Desktop.
Save viniceosm/b9efa860eaa6e899f0fcd8edd02c9c43 to your computer and use it in GitHub Desktop.
function Recjs(usuarios, itens, interacao) {
Object.assign(this, { usuarios, itens, interacao });
}
Recjs.prototype.getAllUsuarios = function() {
return this.usuarios;
}
Recjs.prototype.recomendarPara = function(usuario) {
var filtradoApartirAmigos = filtrarPorAmigos(usuario); //interacao filtrada
filtradoApartirAmigos = filtradoApartirAmigos.sort(function (a, b) {
return a.item.value - b.item.value;
});
filtradoApartirAmigos = filtradoApartirAmigos.map(function (o) {
return populate(o);
});
return filtradoApartirAmigos;
// populate do mongoose
function populate(o) {
var nO = o;
var referencesKey = Object.keys(o).filter(function (key) {
return typeof o[key] == 'object';
});
referencesKey.map(function (key) {
var tabelaDaReference = eval(o[key].reference);
nO[key] = findById(tabelaDaReference, o[key].value);
});
return nO;
}
function findById(arr, id) {
return arr.filter(function (o) {
return (o.id == id);
})[0];
}
function filtrarPorAmigos(usuario) {
return this.interacao.filter(function (o) {
return usuario.amigos.includes(o.usuario.value);
});
}
}
@viniceosm
Copy link
Author

<script src="https://cdn.rawgit.com/viniceosm/b9efa860eaa6e899f0fcd8edd02c9c43/raw/65ce82d31dc4e30194aaa29946f35199d7c274e4/recjs.js"></script>
<script>
	var usuarios = [
		{
			id: 1,
			nome: 'viniciusM',
			local: 'A',
			amigos: [2]
		},
		{
			id: 2,
			nome: 'behling',
			local: 'A'
		},
		{

			id: 3,
			nome: 'alvize',
			local: 'A'
		}
	];

	var itens = [
		{
			id: 1,
			nome: 'Boku no hero'
		}
	];

	var interacao = [
		{
			usuario: { value: 2, reference: 'usuarios' },
			item: { value: 1, reference: 'itens' }
		},
		{
			usuario: { value: 3, reference: 'usuarios' },
			item: { value: 1, reference: 'itens' }
		}
	];

	var recjs = new Recjs(usuarios, itens, interacao);
	var viniciusM = recjs.getAllUsuarios()[0];
	var recomendados = recjs.recomendarPara(viniciusM);

	mostraRecomendacao(recomendados, viniciusM);

	function mostraRecomendacao(recomendados, usuarioRecomendar) {
		recomendados.forEach(recomendado => {
			console.log('Recomendado para ' + usuarioRecomendar.nome + ': ' + recomendado.item.nome + '\n' +
				'\t\t' + recomendado.usuario.nome + ' interage.');
		});
	}
</script>

resultado

Recomendado para viniciusM: Boku no hero
		behling interage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment