У меня есть массив объектов, возвращаемых базой данных, для которой я пытаюсь запустить sort ().

[{
  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,
}]

Я хотел бы получить значение PER_ID для объекта с наименьшим значением для DEAL_TIME_TO_PRESENT_MINS_BIZ_AVG, где также DEAL_COUNT_PRESENTED> = 10.

Код, который у меня есть:

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 Июн 2021 в 23:03

2 ответа

Лучший ответ

Упростите свою жизнь и отфильтруйте элементы, которые не интересуют вас в первую очередь, например:

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;

Ну вот !

2
Julien 8 Июн 2021 в 20:11

Чтобы получить небольшое число m (1) из n записей, сортировка кучи по верхнему m обычно более эффективна. Для 1 это даже короче, поскольку можно использовать простой reduce (аккумулятор представляет собой кучу):

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