Jak vypočítat každý objekt v poli v samostatné pole založené na pravdivý stav?

0

Otázka

Mám to pole

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,
    },

potřeboval jsem oddělit pole, kde když jsem se iterace přes to pole jsem vypočítá součet všech awardedCapacities, kde dodavatel název je stejný

Například jsem měl pole, kde budu mít tento výstup

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

Řešení pro to je:

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);

ale teď se musím zkontrolujte také, zda switcherStatus je setted na true, pouze pokud je setted na false neměl bych to spočítat je awardedCapacity a já jsem neměl tlačit do pole, pokud je jen jeden objekt

takže výstup by měl být

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

C JE vyloučeno, protože je zde switcherStatus nepravdivé, a je 8, protože objekt byl s switcherStatus false

nemůžu najít způsob, jak změnit toto snížení kód zde pro tento účel.

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

Nejlepší odpověď

1

Stačí přidat podmínku ve vašem reduce funkce

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

V jiných jazycích

Tato stránka je v jiných jazycích

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