Saya memiliki array objek seperti berikut:

[
    {
        'Product': 'P1',
        'Price': 150,
        'Location': 1,
    },
    {
        'Product': 'P1',
        'Price': 100,
        'Location': 1,
    },
    {
        'Product': 'P1',
        'Price': 200,
        'Location': 2,
    },
    {
        'Product': 'P2',
        'Price': 10,
        'Location': 1,
    },
    {
        'Product': 'P2',
        'Price': 130,
        'Location': 1,
    },
    {
        'Product': 'P3',
        'Price': 40,
        'Location': 1,
    }
]

Saya perlu menjumlahkan semua harga untuk objek dengan produk yang sama dan lokasi yang sama. Untuk contoh di atas hasilnya adalah:

[
   {
        'Product': 'P1',
        'Price': 250, // price is the sum of both similar in location and product
        'Location': 1,
    },
    {
        'Product': 'P1',
        'Price': 200,
        'Location': 2, // same product but different location
    },
    {
        'Product': 'P2',
        'Price': 140, //sum of same
        'Location': 1, 
    },
    {
        'Product': 'P3',
        'Price': 40,
        'Location': 1,
    },
]

Saya telah mencari beberapa masalah serupa, tetapi itu hanya berurusan dengan satu kunci untuk diperiksa, saya memiliki kunci yang berbeda (produk dan lokasi - mungkin lebih dari 2 di masa mendatang) untuk diidentifikasi sebagai berbeda.

0
Mangrio 8 Januari 2021, 10:29

1 menjawab

Anda dapat menggunakan reduce() untuk melakukan itu,

obj = [
   {
        'Product': 'P1',
        'Price': 250, // price is the sum of both similar in location and product
        'Location': 1,
    },
    {
        'Product': 'P1',
        'Price': 200,
        'Location': 2, // same product but different location
    },
    {
        'Product': 'P2',
        'Price': 140, //sum of same
        'Location': 1, 
    },
    {
        'Product': 'P3',
        'Price': 40,
        'Location': 1,
    },
]

res = obj.reduce((prev, curr) => {
  index = prev.findIndex(item => item.Product=== curr.Product && item.Location === curr.Location);
  if(index > -1) {
    prev[index].Price += curr.Price;
  } else {
    prev.push(curr);
  }
  return prev;
}, []);

console.log(res);
2
sabbir.alam 8 Januari 2021, 07:45