Dizideki her nesneyi doğru duruma göre ayrı bir dizide nasıl hesaplayabilirim?

0

Soru

Bu diziye sahibim

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

bu dizide yinelemeyi yaptığımda, tedarikçi adının aynı olduğu tüm awardedCapacities toplamını hesaplayacağım ayrı bir diziye ihtiyacım vardı

Örneğin, bu çıktıya sahip olacağım diziye sahip olmalıyım

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

Bunun çözümü şudur:

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

ancak şimdi switcherstatus'un yalnızca true olarak ayarlanıp ayarlanmadığını da kontrol etmem gerekiyor-eğer false olarak ayarlanmışsa awardedCapacity hesaplamamalıyım ve tek nesne ise diziye itmemeliyim

yani çıktı şöyle olmalıdır

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

C Burada switcherStatus false olduğu ve A 8 olduğu için nesne üzerinde switcherStatus false olduğu için hariç tutulur

bu azaltma kodunu bu amaçla değiştirmenin bir yolunu bulamıyorum.

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

En iyi cevabı

1

Sadece bir koşul ekleyin reduce işlev

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

Diğer dillerde

Bu sayfa diğer dillerde

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