মান লিয়ে, আমাদের নিচের মত অবজেক্টের একটি অ্যারে আছে -
const arr = [
{_id: "1", S: "2"},
{_id: "1", M: "4"},
{_id: "2", M: "1"},
{_id: "" , M: "1"},
{_id: "3", S: "3"}
];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন একটি অ্যারে গ্রহণ করবে এবং '_id' কী-এর একই ভ্যালু 가진 সব অবজেক্টগুলো একসাথে গ্রুপ করবে।
অতএব, চূড়ান্ত আউটপুট হবে -
const output = [
{_id: "1", M: "4", S: "2", Total: "6"},
{_id: "2", M: "1", S: "0", Total: "1"},
{_id: "6", M: "1", S: "0", Total: "1"},
{_id: "3", M: "0", S: "3", Total: "3"}
];
উদাহরণ
const arr = [
{_id: "1", S: "2"},
{_id: "1", M: "4"},
{_id: "2", M: "1"},
{_id: "6", M: "1"},
{_id: "3", S: "3"}
];
const pickAllConstraints = arr => {
let constraints = [];
arr.forEach(el => {
const keys = Object.keys(el);
constraints = [...constraints, ...keys];
});
return constraints.filter((el, ind) => el !== '_id' && ind === constraints.lastIndexOf(el));
};
const buildItem = (cons, el = {}, prev = {}) => {
const item = {};
let total = 0;
cons.forEach(i => {
item[i] = (+el[i] || 0) + (+prev[i] || 0);
total += item[i];
});
item.total = total;
return item;
};
const buildCumulativeArray = arr => {
const constraints = pickAllConstraints(arr);
const map = {}, res = [];
arr.forEach(el => {
const { _id } = el;
if(map.hasOwnProperty(_id)){
res[map[_id] - 1] = {
_id, ...buildItem(constraints, el, res[map[_id] - 1])
};
} else {
map[_id] = res.push({
_id, ...buildItem(constraints, el)
});
}
});
return res;
};
console.log(buildCumulativeArray(arr));
আউটপুট
কনসোলে আউটপুট হবে -
[
{ _id: '1', M: 4, S: 2, total: 6 },
{ _id: '2', M: 1, S: 0, total: 1 },
{ _id: '6', M: 1, S: 0, total: 1 },
{ _id: '3', M: 0, S: 3, total: 3 }
]