সমস্যা বিবরণ
ডেসিমাল পয়েন্ট যুক্ত স্ট্রিং অ্যারে দেওয়া আছে (যেমন: '.0', '.1', '.2.1')। মানুষের দৃষ্টিতে লজিক্যাল অর্ডারে সর্ট করতে হবে।
ইনপুট: ['.0', '.1', '.2', '.4', '.2.1', '.3', '.4.1', '.5', '.5.1.5']
আউটপুট: ['.0', '.1', '.2', '.2.1', '.3', '.4', '.4.1', '.5', '.5.1.5']
সমাধান
const arr = ['.0', '.1', '.2', '.4', '.2.1', '.3', '.4.1', '.5', '.5.1.5'];
const compare = (a, b) => {
if (a === b) return 0;
const aArr = a.split("."), bArr = b.split(".");
for (let i = 0; i < Math.min(aArr.length, bArr.length); i++) {
if (parseInt(aArr[i]) < parseInt(bArr[i])) return -1;
if (parseInt(aArr[i]) > parseInt(bArr[i])) return 1;
}
if (aArr.length < bArr.length) return -1;
if (aArr.length > bArr.length) return 1;
return 0;
};
arr.sort(compare);
console.log(arr);
আউটপুট
[ '.0', '.1', '.2', '.2.1', '.3', '.4', '.4.1', '.5', '.5.1.5' ]
ব্যাখ্যা
split(".")দিয়ে প্রতিটি অংশ আলাদা করা।- প্রতিটি অংশকে
parseIntদিয়ে নম্বরে রূপান্তর করে তুলনা। - সমান অংশ থাকলে ছোট লেন্থ वाला আগে আসবে।
- ভার্সন নম্বর সর্টিং (semver) এর জন্য আদর্শ।