Skip to content

Instantly share code, notes, and snippets.

@matias-santos-86
Created October 1, 2021 01:44
Show Gist options
  • Save matias-santos-86/d40da03cb0e1e2f04076eed3809913e4 to your computer and use it in GitHub Desktop.
Save matias-santos-86/d40da03cb0e1e2f04076eed3809913e4 to your computer and use it in GitHub Desktop.
lista de películas
const pelis = require("./pelis");
function parsearARGV(argv) {
const respuesta = {}
argv.forEach(function (item, indice) {
if (item.startsWith("--")) {
const nombreSinGuiones = item.slice(2);
respuesta[nombreSinGuiones] = argv[indice + 1];
if (nombreSinGuiones === 'no-format') {
respuesta['format'] = 'no';
}
}
})
return respuesta;
}
function main() {
const comandosAEjecutar = parsearARGV(process.argv.slice(2));
console.log(pelis.searchByCriteria(comandosAEjecutar));
}
main();
const fs = require("fs");
const getAll = function () {
return (arrayDePelis = JSON.parse(
fs.readFileSync(__dirname + "/pelis.json")
));
};
const searchBy = function (texto, array) {
return array.filter(function (element) {
return element["title"].toLowerCase().indexOf(texto.toLowerCase()) > -1;
});
};
const searchByTag = function (texto, array) {
return array.filter(function (element) {
return element["tags"].indexOf(texto) > -1;
});
};
const sortBy = function (propiedad, array) {
return array.sort(function (primero, segundo) {
if (primero[propiedad] > segundo[propiedad]) {
return 1;
}
if (primero[propiedad] < segundo[propiedad]) {
return -1;
}
return 0;
});
};
exports.searchByCriteria = function (criterios) {
let tmp = getAll();
if (criterios.search) {
tmp = searchBy(criterios.search, tmp);
} else {
}
if (criterios.tag) {
tmp = searchByTag(criterios.tag, tmp);
} else {
}
if (criterios.sort) {
tmp = sortBy(criterios.sort, tmp);
} else {
}
if (criterios.format) {
return JSON.stringify(tmp);
}
return tmp;
};
[
{
"title": "El señor de los anillos",
"rating": 9,
"tags": ["Fantasía, facinante, literatura fantástica, favorita"]
},
{
"title": "Volver al futuro",
"rating": 8,
"tags": ["Ciencia ficcion, aventura"]
},
{
"title": "It",
"rating": 7,
"tags": ["Terror, misterio, sobre natural"]
},
{
"title": "Terminator",
"rating": 6,
"tags": ["Acción, ciencia ficción, thriller"]
}
]
@giulianaerro
Copy link

Hola mati, funciona todo bien excepto la busqueda por tags. Fijate que cuando parseas te faltan las S en tags. Es decir:
if (criterios.tagS) {
tmp = searchByTag(criterios.tagS, tmp);

Aun asi no va a funcionar, porque en la lógica del método searchByTag estas filtrando por array entero, osea debes escribir tal cual el array completo de tags para que filtre. Fijate una manera para que el método entre a esos array de tags y logre devolver las pelis que tienen cierto tag.
Tambien revee como se utiliza el if else. vos podes hacer una cadena de if sin necesidad de colocar else ya que los estas dejando vacios por cada if. el else funciona como una especie de si no se cumple esta funcion, hace esto (va sin instruccion de los ())

@matias-santos-86
Copy link
Author

matias-santos-86 commented Oct 1, 2021 via email

@giulianaerro
Copy link

sisi exactamente, cuando te ande lo de tags volves a mandarlo y ya una vez que funcione todo podes pasar al siguiente modulo. Cualquier duda podes escribir en discord. Buen finde!

@FacundoEG
Copy link

FacundoEG commented Oct 4, 2021

Hola Mati! probé el código y note lo mismo que Giuliana, te recomendaría que le pegues una ojeada a los diferentes métodos que hay para ir revisando las posiciones de un array, además de eso, fíjate que los tags los tenes todos adentro de un solo string divididos con comillas, lo que lo hace muy complicado de buscar ya que tenes que si o si que separar cada palabra y después revisarla.

Osea, la lista de tags es un string entero con comas, similar a una frase:

image

Te aconsejaría, que aparte de lo que te comentan arriba, de ultima guardes los tags en diferentes posiciones de un array y ahí te fijes como buscarlos, ya que te va a ser muchísimo mas sencillo y te va a ahorrar que los separes y sumes mas trabajo al código.

(algo así):

image

Esperamos esos cambios!

Saludos!

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