Tengo una variedad de objetos devueltos por la base de datos en la que estoy intentando ejecutar un tipo () en.

[{
  PER_ID: 5511,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '353',
  DEAL_COUNT_PRESENTED: 118,
},
{
  PER_ID: 5016,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '372',
  DEAL_COUNT_PRESENTED: 109,
},{
  PER_ID: 4181,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '359',
  DEAL_COUNT_PRESENTED: 73,
},
{
  PER_ID: 5016,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '372',
  DEAL_COUNT_PRESENTED: 109,
},{
  PER_ID: 158,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '370',
  DEAL_COUNT_PRESENTED: 1112,
}]

Me gustaría obtener el valor de PER_ID para el objeto con el valor más bajo para trato_time_to_present_mins_biz_avg, donde también el trato_count_presented> = 10.

El código que tengo es:

per_recs = per_recs.sort(function (prior, curr) {

  return ((curr.DEAL_COUNT_PRESENTED >= 10 && (prior.DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG - curr.DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG > 0) ? 1 : 0));

});

let per_id_with_lowest_deal_time_to_present_mins_biz_avg = per_recs[0].PER_ID;

0
Nick 8 jun. 2021 a las 23:03

2 respuestas

La mejor respuesta

Simplifique su vida y filtre los elementos que no le interesen primero, así:

const items = [{
  PER_ID: 5511,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '353',
  DEAL_COUNT_PRESENTED: 118,
},
{
  PER_ID: 5016,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '372',
  DEAL_COUNT_PRESENTED: 109,
},{
  PER_ID: 4181,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '359',
  DEAL_COUNT_PRESENTED: 9,
},
{
  PER_ID: 5016,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '372',
  DEAL_COUNT_PRESENTED: 109,
},{
  PER_ID: 158,
  DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG: '370',
  DEAL_COUNT_PRESENTED: 1112,
}]

const sortedItems = items
 .filter(item => item.DEAL_COUNT_PRESENTED >= 10)
 .sort((a, b) => {
   return +a.DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG - +b.DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG
 })

let foundItem = sortedItems[0].PER_ID;

Aqui tienes !

2
Julien 8 jun. 2021 a las 20:11

Para obtener el número pequeño M (1) de N Entradas, un tipo de montón superior es generalmente más eficiente. Para 1 es aún más corto como se puede usar un simple reduce (el acumulador representa el montón):

const lowest = records.reduce((current, entry) => 
  entry.count >= 10 && (!current || entry.avg < current.avg) ? entry : current, null);
0
Jonas Wilms 8 jun. 2021 a las 20:10