মান লিয়ে, আমাদের একটি অবজেক্টের অ্যারে আছে যাতে কিছু ডেটা আছে -
const arr = [
{'item1': 144},
{'item2': 0},
{'item3': 366},
{'item4': 15},
{'item6': 366},
{'item7': 19},
{'item8': 211},
{'item9': 121}
];
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা এমন একটি অ্যারে গ্রহণ করবে এবং অবজেক্টগুলো চারটি গ্রুপে ক্লাস্টার করবে: 'XL', 'L', 'M', 'S'।
সংখ্যাগুলো তাদের আপেক্ষিক মাত্রা অনুযায়ী এই গ্রুপগুলোর মধ্যে বিতরণ হবে।
উদাহরণ
const arr = [
{'item1': 144},
{'item2': 0},
{'item3': 366},
{'item4': 15},
{'item6': 366},
{'item7': 19},
{'item8': 211},
{'item9': 121}
];
const compareWithRange = (rangeArr, num) => {
for(let i = 0; i < rangeArr.length; i++){
if(num <= rangeArr[i] && num > rangeArr[i + 1]){
return i;
};
};
return rangeArr.length - 1;
};
const groupBySize = (arr = []) => {
const mapping = arr => arr.map(el => el[Object.keys(el)[0]]);
const max = Math.max(...mapping(arr));
const range = {
'XL': max,
'L': (max * 3) / 4,
'M': (max / 2),
'S': (max / 4)
};
const legend = ['XL', 'L', 'M', 'S'];
const res = {};
arr.forEach(el => {
const num = el[Object.keys(el)[0]];
const index = compareWithRange(Object.keys(range).map(key => range[key]), num);
const size = legend[index];
if(res.hasOwnProperty(size)){
res[size].push(Object.keys(el));
} else {
res[size] = [Object.keys(el)];
}
});
return res;
};
console.log(groupBySize(arr));
আউটপুট
কনসোলে আউটপুট হবে -
{
M: [ ['item1'], ['item9'] ],
S: [ ['item2'], ['item4'], ['item7'] ],
XL: [ ['item3'], ['item6'] ],
L: [ ['item8'] ]
}