ES2017 বৈশিষ্ট্যগুলি যেমন তীর ফাংশন এবং ডেস্ট্রাকচারিং ব্যবহার করে একই জিনিসটির কিছুটা সংক্ষিপ্ত সংস্করণ:
ক্রিয়া
var stableSort = (arr, compare) => arr
.map((item, index) => ({item, index}))
.sort((a, b) => compare(a.item, b.item) || a.index - b.index)
.map(({item}) => item)
এটি ইনপুট অ্যারে গ্রহণ করে এবং ফাংশন তুলনা করে:
stableSort([5,6,3,2,1], (a, b) => a - b)
এটি বিল্ট-ইন অ্যারে.সোর্ট () ফাংশনের মতো ইন-প্লেস সাজানোর পরিবর্তে নতুন অ্যারেও দেয়।
পরীক্ষা
আমরা যদি নিম্নলিখিত inputঅ্যারেটি গ্রহণ করি তবে প্রাথমিকভাবে বাছাই করা weight:
// sorted by weight
var input = [
{ height: 100, weight: 80 },
{ height: 90, weight: 90 },
{ height: 70, weight: 95 },
{ height: 100, weight: 100 },
{ height: 80, weight: 110 },
{ height: 110, weight: 115 },
{ height: 100, weight: 120 },
{ height: 70, weight: 125 },
{ height: 70, weight: 130 },
{ height: 100, weight: 135 },
{ height: 75, weight: 140 },
{ height: 70, weight: 140 }
]
তারপরে এটি heightব্যবহার করে বাছাই করুন stableSort:
stableSort(input, (a, b) => a.height - b.height)
ফলাফল স্বরূপ:
// Items with the same height are still sorted by weight
// which means they preserved their relative order.
var stable = [
{ height: 70, weight: 95 },
{ height: 70, weight: 125 },
{ height: 70, weight: 130 },
{ height: 70, weight: 140 },
{ height: 75, weight: 140 },
{ height: 80, weight: 110 },
{ height: 90, weight: 90 },
{ height: 100, weight: 80 },
{ height: 100, weight: 100 },
{ height: 100, weight: 120 },
{ height: 100, weight: 135 },
{ height: 110, weight: 115 }
]
তবে inputঅন্তর্নির্মিত Array.sort()(ক্রোম / নোডজেএস এ) ব্যবহার করে একই অ্যারে বাছাই করা :
input.sort((a, b) => a.height - b.height)
রিটার্নস:
var unstable = [
{ height: 70, weight: 140 },
{ height: 70, weight: 95 },
{ height: 70, weight: 125 },
{ height: 70, weight: 130 },
{ height: 75, weight: 140 },
{ height: 80, weight: 110 },
{ height: 90, weight: 90 },
{ height: 100, weight: 100 },
{ height: 100, weight: 80 },
{ height: 100, weight: 135 },
{ height: 100, weight: 120 },
{ height: 110, weight: 115 }
]
সম্পদ
হালনাগাদ
Array.prototype.sort ভি 8 ভি 7.0 / ক্রোম 70 এ এখন স্থিতিশীল!
পূর্বে, ভি 8 10 টিরও বেশি উপাদান সহ অ্যারেগুলির জন্য একটি অস্থির কুইকসোর্ট ব্যবহার করত। এখন, আমরা স্থিতিশীল টিমসোর্ট আলগোরিদিম ব্যবহার করি।
উৎস