Как рассчитать каждый объект в массиве в отдельном массиве на основе условия истинности?

0

Вопрос

У меня есть этот массив

bidsList = [
    {
      supplierName:'A',
      awardedCapacity:5,
      switcherStatus: true
    },
    {
      supplierName:'B',
      awardedCapacity:10,
      switcherStatus: true,
    },
    {
      supplierName:'A',
      awardedCapacity:5,
      switcherStatus: false,
    },
    {
      supplierName:'A',
      awardedCapacity:3,
      switcherStatus: true,
    },
    {
      supplierName:'B',
      awardedCapacity:5,
      switcherStatus: true,
    },
    {
      supplierName:'C',
      awardedCapacity:2,
      switcherStatus: false,
    },

мне нужен был отдельный массив, в котором, когда я выполню итерацию по этому массиву, я рассчитаю общее количество всех награжденных городов, где имя поставщика совпадает

Например, у меня должен быть массив, в котором у меня будет этот вывод

 let newArr = [
    {
      supplierName: 'A',
      totalAwarded: 13,
    },
    {
      supplierName:'B',
      totalAwarded: 15,
    },
    {
      supplierName:'C',
      totalAwarded: 2,
    }
  ]

Решением для этого является:

let newArr = [];
bidsList.reduce(function(acc, val) {
  if (!acc[val.supplierName]) {
    acc[val.supplierName] = { supplierName: val.supplierName, awardedCapacity: 0 };
    newArr.push(acc[val.supplierName])
  }
  acc[val.supplierName].awardedCapacity += val.awardedCapacity;
  return acc;
}, {});

console.log(newArr);

но теперь мне также нужно проверить, установлен ли параметр switcherStatus только в значение true - если он установлен в значение false, я не должен вычислять его пропускную способность, и я не должен вставлять его в массив, если это единственный объект

таким образом, результат должен быть

 let newArr = [
    {
      supplierName: 'A',
      totalAwarded: 8,
    },
    {
      supplierName:'B',
      totalAwarded: 15,
    },
  ]

C Исключается здесь, потому что это switcherStatus false, а A равно 8 - потому что объект on был с параметром switcherStatus false

я не могу найти способ изменить этот код сокращения здесь для этой цели.

algorithm javascript
2021-11-23 12:31:04
1

Лучший ответ

1

Просто добавьте условие в свой reduce функция

var bidsList = [{
    supplierName: 'A',
    awardedCapacity: 5,
    switcherStatus: true
  },
  {
    supplierName: 'B',
    awardedCapacity: 10,
    switcherStatus: true,
  },
  {
    supplierName: 'A',
    awardedCapacity: 5,
    switcherStatus: false,
  },
  {
    supplierName: 'A',
    awardedCapacity: 3,
    switcherStatus: true,
  },
  {
    supplierName: 'B',
    awardedCapacity: 5,
    switcherStatus: true,
  },
  {
    supplierName: 'C',
    awardedCapacity: 2,
    switcherStatus: false,
  }
];

var result = bidsList.reduce((a, c) => {
  if (c.switcherStatus) {
    let supplier = a.find(e => e.supplierName == c.supplierName);
    if (supplier)
      supplier.totalAwarded += c.awardedCapacity;
    else
      a.push({
        supplierName: c.supplierName,
        totalAwarded: c.awardedCapacity
      });
  }
  return a;
}, []);

console.log(result);

2021-11-23 12:56:44

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................