বলছি আমি রূপকভাবে হতবাক! অবশ্যই সমস্ত উত্তর কিছুটা পুরানো, তবে কেউ বাছাইয়ের স্থায়িত্বের কথাও উল্লেখ করেনি! সুতরাং আমার সাথে সহ্য করুন আমি নিজেই প্রশ্নের উত্তর দেওয়ার জন্য যথাসাধ্য চেষ্টা করব এবং এখানে বিশদে যাব। তাই আমি এখন ক্ষমা চাইতে চলেছি এটি পড়ার অনেক কিছুই হবে be
যেহেতু এটি 2018 হ'ল আমি কেবল ES6 ব্যবহার করব, তাই পলিফিলগুলি এমডিএন ডক্সে উপলভ্য, যা আমি প্রদত্ত অংশে লিঙ্ক করব।
প্রশ্নের উত্তর দাও:
যদি আপনার কীগুলি কেবলমাত্র সংখ্যা হয় তবে আপনি বাছাই করা বস্তুটি ফেরত দিতে নিরাপদে Object.keys()
একসাথে ব্যবহার Array.prototype.reduce()
করতে পারেন:
// Only numbers to show it will be sorted.
const testObj = {
'2000': 'Articel1',
'4000': 'Articel2',
'1000': 'Articel3',
'3000': 'Articel4',
};
// I'll explain what reduces does after the answer.
console.log(Object.keys(testObj).reduce((accumulator, currentValue) => {
accumulator[currentValue] = testObj[currentValue];
return accumulator;
}, {}));
/**
* expected output:
* {
* '1000': 'Articel3',
* '2000': 'Articel1',
* '3000': 'Articel4',
* '4000': 'Articel2'
* }
*/
// if needed here is the one liner:
console.log(Object.keys(testObj).reduce((a, c) => (a[c] = testObj[c], a), {}));
তবে আপনি যদি স্ট্রিং নিয়ে কাজ করছেন তবে আমি Array.prototype.sort()
এই সমস্তগুলিতে শৃঙ্খলাবদ্ধ হওয়ার সুপারিশ করছি :
// String example
const testObj = {
'a1d78eg8fdg387fg38': 'Articel1',
'z12989dh89h31d9h39': 'Articel2',
'f1203391dhj32189h2': 'Articel3',
'b10939hd83f9032003': 'Articel4',
};
// Chained sort into all of this.
console.log(Object.keys(testObj).sort().reduce((accumulator, currentValue) => {
accumulator[currentValue] = testObj[currentValue];
return accumulator;
}, {}));
/**
* expected output:
* {
* a1d78eg8fdg387fg38: 'Articel1',
* b10939hd83f9032003: 'Articel4',
* f1203391dhj32189h2: 'Articel3',
* z12989dh89h31d9h39: 'Articel2'
* }
*/
// again the one liner:
console.log(Object.keys(testObj).sort().reduce((a, c) => (a[c] = testObj[c], a), {}));
যদি কেউ ভাবছেন যে কী হ্রাস করে:
// Will return Keys of object as an array (sorted if only numbers or single strings like a,b,c).
Object.keys(testObj)
// Chaining reduce to the returned array from Object.keys().
// Array.prototype.reduce() takes one callback
// (and another param look at the last line) and passes 4 arguments to it:
// accumulator, currentValue, currentIndex and array
.reduce((accumulator, currentValue) => {
// setting the accumulator (sorted new object) with the actual property from old (unsorted) object.
accumulator[currentValue] = testObj[currentValue];
// returning the newly sorted object for the next element in array.
return accumulator;
// the empty object {} ist the initial value for Array.prototype.reduce().
}, {});
এখানে যদি প্রয়োজন হয় তবে একটি লাইনারের জন্য ব্যাখ্যা:
Object.keys(testObj).reduce(
// Arrow function as callback parameter.
(a, c) =>
// parenthesis return! so we can safe the return and write only (..., a);
(a[c] = testObj[c], a)
// initial value for reduce.
,{}
);
বাছাই কেন কিছুটা জটিল:
সংক্ষেপে Object.keys()
আমরা একটি সাধারণ লুপের সাথে যেমন পাই তেমন আদেশের সাথে একটি অ্যারে ফিরিয়ে দেব:
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
// expected output: Array ["a", "b", "c"]
অবজেক্ট.কিজ () এমন একটি অ্যারের প্রদান করে যার উপাদানগুলি স্ট্রিংগুলিতে সরাসরি বস্তুর উপরে পাওয়া অগণিত বৈশিষ্ট্যের সাথে মিল রাখে। বৈশিষ্ট্যগুলির ক্রম হ'ল ডিফল্টরূপে বস্তুর বৈশিষ্ট্যগুলি লুপ করে দেওয়া।
সিডিনোট - আপনি Object.keys()
অ্যারেতেও ব্যবহার করতে পারেন , মনে রাখবেন সূচকটি ফিরে আসবে:
// simple array
const arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
তবে এই উদাহরণগুলির দ্বারা দেখানো যতটা সহজ নয়, বাস্তব বিশ্বের বস্তুতে সংখ্যা এবং বর্ণমালা বা এমনকি চিহ্ন থাকতে পারে (দয়া করে এটি করবেন না)।
এখানে একটিতে সমস্ত বস্তুর সাথে একটি উদাহরণ রয়েছে:
// This is just to show what happens, please don't use symbols in keys.
const testObj = {
'1asc': '4444',
1000: 'a',
b: '1231',
'#01010101010': 'asd',
2: 'c'
};
console.log(Object.keys(testObj));
// output: [ '2', '1000', '1asc', 'b', '#01010101010' ]
এখন আমরা যদি Array.prototype.sort()
আউটপুট পরিবর্তনের উপরে অ্যারে ব্যবহার করি :
console.log(Object.keys(testObj).sort());
// output: [ '#01010101010', '1000', '1asc', '2', 'b' ]
দস্তাবেজের একটি উদ্ধৃতি এখানে:
বাছাই () পদ্ধতিটি একটি অ্যারের উপাদানগুলিকে স্থানে বাছাই করে অ্যারেটি দেয় returns বাছাই অগত্যা স্থিতিশীল নয়। ডিফল্ট সাজানোর ক্রমটি স্ট্রিং ইউনিকোড কোড পয়েন্ট অনুসারে হয়।
সাজানোর সময় এবং স্থান জটিলতার গ্যারান্টি দেওয়া যায় না কারণ এটি বাস্তবায়ন নির্ভর।
আপনাকে অবশ্যই নিশ্চিত করতে হবে যে তাদের মধ্যে একটি আপনার জন্য পছন্দসই আউটপুট ফিরিয়ে দেয়। রিলাইফ উদাহরণগুলিতে লোকেরা বিশেষত জিনিসগুলিকে মিশ্রিত করতে থাকে যদি আপনি বিভিন্ন তথ্য ইনপুট যেমন এপিআই এবং ডেটাবেস একসাথে ব্যবহার করেন।
বড় চুক্তি কি তাই?
ওয়েল এখানে দুটি নিবন্ধ রয়েছে যা প্রতিটি প্রোগ্রামারকে বুঝতে হবে:
ইন-প্লেস অ্যালগরিদম :
কম্পিউটার সায়েন্সে, ইন-প্লেস অ্যালগরিদম হ'ল একটি অ্যালগরিদম যা কোনও সহায়ক ডেটা কাঠামো ব্যবহার করে ইনপুট রূপান্তর করে। তবে সহায়ক ভেরিয়েবলের জন্য অল্প পরিমাণে অতিরিক্ত স্টোরেজ স্পেসের অনুমতি রয়েছে। ইনপুটটি সাধারণত অ্যালগরিদম কার্যকর হওয়ার সাথে সাথে আউটপুট দ্বারা ওভাররাইট করা হয়। ইন-প্লেস অ্যালগরিদম কেবলমাত্র উপাদানগুলির প্রতিস্থাপন বা অদলবদলের মাধ্যমে ইনপুট ক্রম আপডেট করে। একটি অ্যালগরিদম যা স্থান না হয় কখনও কখনও স্থান নিক্ষেপ বা বাহিরে বলা হয়।
সুতরাং মূলত আমাদের পুরানো অ্যারে ওভাররাইট করা হবে! আপনি যদি অন্য কারণে পুরানো অ্যারে রাখতে চান তবে এটি গুরুত্বপূর্ণ। তাই এটি মাথায় রাখুন।
বাছাই অ্যালগরিদম
স্থিতিশীল বাছাই অ্যালগরিদমগুলি অভিন্ন উপাদানগুলিকে একই ক্রমে বাছাই করে যেগুলি ইনপুটটিতে উপস্থিত হয়। কিছু ধরণের ডেটা বাছাই করার সময়, বাছাইয়ের ক্রম নির্ধারণের সময় কেবলমাত্র তথ্যের কিছু অংশ পরীক্ষা করা হয়। উদাহরণস্বরূপ, ডানদিকে কার্ড বাছাইয়ের উদাহরণে কার্ডগুলি তাদের র্যাঙ্ক অনুসারে বাছাই করা হচ্ছে এবং তাদের মামলা উপেক্ষা করা হচ্ছে। এটি মূল তালিকার একাধিক ভিন্ন সঠিকভাবে সাজানো সংস্করণের সম্ভাবনাটিকে মঞ্জুরি দেয়। স্থিতিশীল বাছাই অ্যালগরিদম নিম্নলিখিত নিয়ম অনুসারে এর মধ্যে একটি বেছে নিন: যদি দুটি আইটেম দুটি 5 কার্ডের মতো সমান হিসাবে তুলনা করে, তবে তাদের আপেক্ষিক ক্রম সংরক্ষণ করা হবে, যাতে ইনপুটটিতে যদি অন্যটির আগে উপস্থিত হয়, এটিও হবে আউটপুট মধ্যে অন্যের আগে আসা।
কার্ড খেলতে স্থিতিশীল সাজানোর উদাহরণ। কার্ডগুলি যখন স্থিতিশীল বাছাইয়ের সাথে র্যাঙ্ক অনুসারে বাছাই করা হয়, দুটি 5 টি অবশ্যই মূলত সাজানো আউটপুটে একই ক্রমে থাকতে হবে they যখন তারা একটি অ-স্থিতিশীল সাজানোর মাধ্যমে বাছাই করা হয়, 5 টি বিপরীতে শেষ হতে পারে সাজানো আউটপুট ক্রম।
এটি দেখায় যে বাছাই করা ঠিক আছে তবে এটি পরিবর্তিত হয়েছে। সত্যিকারের বিশ্বে এমনকি বাছাই করা সঠিক হলেও আমাদের তা নিশ্চিত করতে হবে যে আমরা যা প্রত্যাশা করি তা পেয়েছি! এটি অত্যন্ত গুরুত্বপূর্ণ এটিও মনে রাখবেন। আরও জাভাস্ক্রিপ্ট উদাহরণের জন্য অ্যারে.প্রোটোটাইপ.সোর্ট () - ডক্সগুলি দেখুন: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অ্যারে / সার্ট