Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
¿Cómo evitar la ejecución cuando alguien está ausente?

Actualmente estoy trabajando en un bot de holgura. El propósito es que se seleccionará un desarrollador para una actualización todos los días a las 8 am. Actualmente estoy tratando de descubrir cómo evitar una ejecución cuando alguien está ausente.

 var result_arr = []; function setValue (value) { result_arr = Object.values(JSON.parse(JSON.stringify(value))); return result_arr; } db.connect(function(err) { db.query("SELECT * FROM developers", (err, result, fields) => { if (err) { console.log(err); } else { // selected = all.map(item => item.selected); setValue(result); removeMax(); } }) })

Resultado de result_arr

 rows [ { id: 5, name: 'wqeqwe', selected: 13, absent: 1 }, { id: 7, name: 'weqe', selected: 3, absent: 1 }, { id: 8, name: 'me', selected: 13, absent: 1 }, { id: 9, name: 'joe', selected: 18, absent: 0 }, { id: 10, name: 'tim', selected: 3, absent: 0 } ]

La función RemoveMax eliminará el seleccionado más alto (8) y barajará los otros (1, 3, 4, 6), luego capturará uno aleatorio

 function removeMax() { const max = Math.max(result_arr.map(item => item.selected)); newArr = result_arr.filter(item => item.selected !== max) shufflearray = newArr[Math.floor(Math.random()*newArr.length)]; setShuffle(shufflearray); hello(); }

Esto está conectado con RemoveMax, pero como es asíncrono, tengo que hacerlo global para agregarlo a otra función.

 var result_shuffle = []; function setShuffle (shufflearray) { result_shuffle = shufflearray; return result_shuffle }

El barajador ha elegido un Seleccionado al azar.

 result_shuffle { id: 5, name: 'wqeqwe', selected: 13, absent: 1 }

Llegando a la pregunta. wqeqwe está ausente hoy, por lo tanto, la ejecución debe cancelarse; sin embargo, todavía quiero que se seleccione a alguien que NO esté ausente y que el código vuelva a ejecutarse. ¿Cómo hago esto?

 function hello() { console.log("1", result_shuffle); console.log("2", result_shuffle.absent); if (shufflearray.absent == 1) { const baddy = "urbad" } else (shufflearray) => { var sql = `UPDATE developers SET selected = ${result_shuffle.selected} + 1 WHERE id = ${result_shuffle.id}`; db.query(sql, function (err, result) { if (err) throw err; console.log(result.affectedRows + " record(s) updated"); }); } }
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Solo lo filtras. Ya lo está haciendo, solo necesita filtrarlo dos veces, una vez para cada condición.

Pero primero, Math.max espera una entrada diferente. Deberá distribuir esa matriz antes de que funcione. Y luego acabo de agregar un segundo filtro al mapeo newArr para eliminar a todos los que están ausentes.

 const result_arr = [ { id: 5, name: 'wqeqwe', selected: 13, absent: 1 }, { id: 7, name: 'weqe', selected: 3, absent: 1 }, { id: 8, name: 'me', selected: 13, absent: 1 }, { id: 9, name: 'joe', selected: 18, absent: 0 }, { id: 10, name: 'tim', selected: 3, absent: 0 } ]; const max = Math.max(...result_arr.map(item => item.selected)); let newArr = result_arr.filter(item => item.selected !== max) .filter(item => !item.absent); console.log(newArr);

Pero también debe filtrar a las personas ausentes del cálculo máximo, creo, en caso de que una de las personas ausentes tenga la selección más alta, así que también agregué el filtro ausente allí. Además, ten en cuenta que si joe (18) estuviera ausente y wqeqwe y me (13) no, tanto wqeqwe como me serían eliminados, ya que tienen el mismo seleccionado.

 const result_arr = [ { id: 5, name: 'wqeqwe', selected: 13, absent: 1 }, { id: 7, name: 'weqe', selected: 3, absent: 1 }, { id: 8, name: 'me', selected: 13, absent: 1 }, { id: 9, name: 'joe', selected: 18, absent: 0 }, { id: 10, name: 'tim', selected: 3, absent: 0 } ]; const max = Math.max( ...result_arr.filter(item => !item.absent) .map(item => item.selected) ); let newArr = result_arr.filter(item => item.selected !== max) .filter(item => !item.absent); console.log(newArr);

Luego, simplemente mezcla esa matriz filtrada con la función de reproducción aleatoria.

También puede combinar ambas condiciones en el primer filtro:

 const result_arr = [ { id: 5, name: 'wqeqwe', selected: 13, absent: 1 }, { id: 7, name: 'weqe', selected: 3, absent: 1 }, { id: 8, name: 'me', selected: 13, absent: 1 }, { id: 9, name: 'joe', selected: 18, absent: 0 }, { id: 10, name: 'tim', selected: 3, absent: 0 } ]; const max = Math.max( ...result_arr.filter(item => !item.absent) .map(item => item.selected) ); let newArr = result_arr.filter( item => item.selected !== max && !item.absent ); console.log(newArr);

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda