কেবলমাত্র জাভাস্ক্রিপ্ট ব্যবহার করে কীভাবে নিম্নলিখিত পরিস্থিতিতে বাস্তবায়ন করতে হবে:
- বৈশিষ্ট্য সহ একটি গাড়ী অবজেক্ট তৈরি করুন (শীর্ষ গতি, ব্র্যান্ড ইত্যাদি)
- সেই বৈশিষ্ট্য দ্বারা অর্ডার করা গাড়িগুলির একটি তালিকা বাছাই করুন
কেবলমাত্র জাভাস্ক্রিপ্ট ব্যবহার করে কীভাবে নিম্নলিখিত পরিস্থিতিতে বাস্তবায়ন করতে হবে:
উত্তর:
জাভাস্ক্রিপ্টে বাছাই করা ফাংশন রয়েছে যা প্যারামিটার হিসাবে অন্য ফাংশন নিতে পারে - যে দ্বিতীয় ফাংশনটি দুটি উপাদানের তুলনায় ব্যবহৃত হয়।
উদাহরণ:
cars = [
{
name: "Honda",
speed: 80
},
{
name: "BMW",
speed: 180
},
{
name: "Trabi",
speed: 40
},
{
name: "Ferrari",
speed: 200
}
]
cars.sort(function(a, b) {
return a.speed - b.speed;
})
for(var i in cars)
document.writeln(cars[i].name) // Trabi Honda BMW Ferrari
ঠিক আছে, আপনার মন্তব্য থেকে আমি দেখতে পাচ্ছি যে আপনি 'বাছাই' শব্দটি ভুল অর্থে ব্যবহার করছেন। প্রোগ্রামিংয়ে "সাজান" এর অর্থ "জিনিসগুলিকে একটি নির্দিষ্ট ক্রমে রাখুন", "দলগুলিতে জিনিসগুলি সাজানো" নয়। পরেরটি অনেক সহজ - আপনি বাস্তব বিশ্বে কীভাবে জিনিসগুলিকে "সাজান" ঠিক তেমনই এটি
a.someProp - b.someProp
) সর্বনিম্ন থেকে সর্বোচ্চ এবং বিপরীত ( b.someProp - a.someProp
) সর্বাধিক থেকে নিম্নতম পর্যন্ত সাজায় orts মূলত, যদি ফাংশনটি 0 এর চেয়ে কম ফিরে আসে তবে খ এর আগে একটি আসে।
উদাহরণ।
এটি উইন্ডোতে cscript.exe- এ চলে।
// define the Car class
(function() {
// makeClass - By John Resig (MIT Licensed)
// Allows either new User() or User() to be employed for construction.
function makeClass(){
return function(args){
if ( this instanceof arguments.callee ) {
if ( typeof this.init == "function" )
this.init.apply( this, (args && args.callee) ? args : arguments );
} else
return new arguments.callee( arguments );
};
}
Car = makeClass();
Car.prototype.init = function(make, model, price, topSpeed, weight) {
this.make = make;
this.model = model;
this.price = price;
this.weight = weight;
this.topSpeed = topSpeed;
};
})();
// create a list of cars
var autos = [
new Car("Chevy", "Corvair", 1800, 88, 2900),
new Car("Buick", "LeSabre", 31000, 138, 3700),
new Car("Toyota", "Prius", 24000, 103, 3200),
new Car("Porsche", "911", 92000, 155, 3100),
new Car("Mercedes", "E500", 67000, 145, 3800),
new Car("VW", "Passat", 31000, 135, 3700)
];
// a list of sorting functions
var sorters = {
byWeight : function(a,b) {
return (a.weight - b.weight);
},
bySpeed : function(a,b) {
return (a.topSpeed - b.topSpeed);
},
byPrice : function(a,b) {
return (a.price - b.price);
},
byModelName : function(a,b) {
return ((a.model < b.model) ? -1 : ((a.model > b.model) ? 1 : 0));
},
byMake : function(a,b) {
return ((a.make < b.make) ? -1 : ((a.make > b.make) ? 1 : 0));
}
};
function say(s) {WScript.Echo(s);}
function show(title)
{
say ("sorted by: "+title);
for (var i=0; i < autos.length; i++) {
say(" " + autos[i].model);
}
say(" ");
}
autos.sort(sorters.byWeight);
show("Weight");
autos.sort(sorters.byModelName);
show("Name");
autos.sort(sorters.byPrice);
show("Price");
আপনি একটি সাধারণ বাছাই করতে পারেন।
var byProperty = function(prop) {
return function(a,b) {
if (typeof a[prop] == "number") {
return (a[prop] - b[prop]);
} else {
return ((a[prop] < b[prop]) ? -1 : ((a[prop] > b[prop]) ? 1 : 0));
}
};
};
autos.sort(byProperty("topSpeed"));
show("Top Speed");
আমি এই সহজ ফাংশনটি নিজের জন্য লিখেছি:
function sortObj(list, key) {
function compare(a, b) {
a = a[key];
b = b[key];
var type = (typeof(a) === 'string' ||
typeof(b) === 'string') ? 'string' : 'number';
var result;
if (type === 'string') result = a.localeCompare(b);
else result = a - b;
return result;
}
return list.sort(compare);
}
উদাহরণস্বরূপ আপনার গাড়ীর তালিকা রয়েছে:
var cars= [{brand: 'audi', speed: 240}, {brand: 'fiat', speed: 190}];
var carsSortedByBrand = sortObj(cars, 'brand');
var carsSortedBySpeed = sortObj(cars, 'speed');
আসুন আমরা বলতে পারি যে কোনও নির্দিষ্ট সম্পত্তির উপর ভিত্তি করে আমাদের ক্রমবর্ধমান ক্রমে অবজেক্টগুলির একটি তালিকা বাছাই করতে হবে, উদাহরণস্বরূপ বলতে দিন যে "নাম" বৈশিষ্ট্যের ভিত্তিতে আমাদের বাছাই করতে হবে, তারপরে প্রয়োজনীয় কোডটি নীচে রয়েছে:
var list_Objects = [{"name"="Bob"},{"name"="Jay"},{"name"="Abhi"}];
Console.log(list_Objects); //[{"name"="Bob"},{"name"="Jay"},{"name"="Abhi"}]
list_Objects.sort(function(a,b){
return a["name"].localeCompare(b["name"]);
});
Console.log(list_Objects); //[{"name"="Abhi"},{"name"="Bob"},{"name"="Jay"}]
সঙ্গে ES6 তীর ফাংশন এটা ভালো হবে:
//Let's say we have these cars
let cars = [ { brand: 'Porsche', top_speed: 260 },
{ brand: 'Benz', top_speed: 110 },
{ brand: 'Fiat', top_speed: 90 },
{ brand: 'Aston Martin', top_speed: 70 } ]
Array.prototype.sort()
একটি তুলনামূলক ফাংশন গ্রহণ করতে পারে (এখানে আমি তীর চিহ্ন চিহ্নিত করেছি, তবে সাধারণ ফাংশনগুলি একই কাজ করে):
let sortedByBrand = [...cars].sort((first, second) => first.brand > second.brand)
// [ { brand: 'Aston Martin', top_speed: 70 },
// { brand: 'Benz', top_speed: 110 },
// { brand: 'Fiat', top_speed: 90 },
// { brand: 'Porsche', top_speed: 260 } ]
উপরোক্ত পদ্ধতির মাধ্যমে গাড়ির অ্যারের সামগ্রীগুলি একটি নতুনতে অনুলিপি করা হয় এবং ব্র্যান্ডের নামের উপর ভিত্তি করে এটিকে বর্ণমালা অনুসারে বাছাই করা হয়। একইভাবে, আপনি একটি পৃথক ফাংশন পাস করতে পারেন:
let sortedBySpeed =[...cars].sort((first, second) => first.top_speed > second.top_speed)
//[ { brand: 'Aston Martin', top_speed: 70 },
// { brand: 'Fiat', top_speed: 90 },
// { brand: 'Benz', top_speed: 110 },
// { brand: 'Porsche', top_speed: 260 } ]
আপনি যদি মনে করেন না যে অরজিনাল অ্যারেটি পরিবর্তন cars.sort(comparatorFunction)
করতে পারেন তবে কৌশলটি করবে।
এখানে একটি সংক্ষিপ্ত উদাহরণ রয়েছে, যা বস্তু তৈরি করে এবং অ্যারে তৈরি করে, এবং সংখ্যাসূচক বা বর্ণানুক্রমিকভাবে সাজান:
// Create Objects Array
var arrayCarObjects = [
{brand: "Honda", topSpeed: 45},
{brand: "Ford", topSpeed: 6},
{brand: "Toyota", topSpeed: 240},
{brand: "Chevrolet", topSpeed: 120},
{brand: "Ferrari", topSpeed: 1000}
];
// Sort Objects Numerically
arrayCarObjects.sort((a, b) => (a.topSpeed - b.topSpeed));
// Sort Objects Alphabetically
arrayCarObjects.sort((a, b) => (a.brand > b.brand) ? 1 : -1);
বিপরীত বাছাইয়ের সাথে চিজো সমাধানের একটি সংস্করণ, আমি স্বচ্ছতার অভাবের জন্য তিনটি প্রকাশগুলিও সরিয়েছি (তবে এটি ব্যক্তিগত স্বাদ)।
function(prop, reverse) {
return function(a, b) {
if (typeof a[prop] === 'number') {
return (a[prop] - b[prop]);
}
if (a[prop] < b[prop]) {
return reverse ? 1 : -1;
}
if (a[prop] > b[prop]) {
return reverse ? -1 : 1;
}
return 0;
};
};
return !!reverse ? (a[prop] - b[prop]) * -1 : (a[prop] - b[prop]);
!
এটি খুব ভাল:return reverse ? (a[prop] - b[prop]) * -1 : (a[prop] - b[prop]);
!!
যেমন জাভাস্ক্রিপ্ট মান "falsy" প্রকৃতির বিরোধিতা একটি নেটিভ বুলিয়ান টাইপ মান বাহিনী জাভাস্ক্রিপ্টের এই মাতব্বরী, কঠোরভাবে প্রয়োজন কিন্তু অন্তত আমার কাছে সুস্পষ্ট করে দিয়েছেন উদ্দেশ্য নয়। মনে রাখবেন আপনি যখন কোন মান ফিরিয়ে দিয়ে !!
এটা একটি নেটিভ বুলিয়ান টাইপ একটি "falsy" মান যা বলতে হয় সঙ্গে একটি নেটিভ ধরনের বিরোধিতা typeof !!undefined
বা typeof !!null
ইত্যাদি আয় "বুলিয়ান" লক্ষ্য করুন !!" "
নেই true
কিন্তু !!""
হয় false
(স্থান, কোন স্থান স্ট্রিং) তবে আপনি সম্ভবত এটি জানেন।