केवल जावास्क्रिप्ट का उपयोग करके निम्नलिखित परिदृश्य को कैसे लागू करें:
- गुण (शीर्ष गति, ब्रांड आदि) के साथ एक कार ऑब्जेक्ट बनाएं
- उन संपत्तियों द्वारा ऑर्डर की गई कारों की सूची को क्रमबद्ध करें
केवल जावास्क्रिप्ट का उपयोग करके निम्नलिखित परिदृश्य को कैसे लागू करें:
जवाबों:
जावास्क्रिप्ट में सॉर्ट फ़ंक्शन होता है जो दूसरे फ़ंक्शन को पैरामीटर के रूप में ले सकता है - उस दूसरे फ़ंक्शन का उपयोग दो तत्वों की तुलना करने के लिए किया जाता है।
उदाहरण:
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
) उच्चतम से निम्नतम तक क्रमबद्ध है। मूल रूप से, यदि फ़ंक्शन 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" प्रकृति का विरोध करने के एक देशी बूलियन प्रकार मान बलों प्रकार बलात्कार, सख्ती की जरूरत है, लेकिन कम से कम मेरे लिए स्पष्ट उद्देश्य नहीं। ध्यान दें कि जब आप !!
इसके साथ एक मान लौटाते हैं , तो एक देशी बुलियन प्रकार होता है, जो कि "फाल्सी" मूल्य के साथ एक देशी प्रकार के विपरीत होता है, जो कहने के लिए होता है typeof !!undefined
या typeof !!null
आदि "बूलियन" वापस करते हैं !!" "
, true
लेकिन !!""
यह नोट है false
(स्थान, कोई स्थान नहीं है) स्ट्रिंग) लेकिन आप शायद पहले से ही जानते थे।