আন্ডারস্কোর.জেএস ব্যবহার করে আমি কীভাবে একটি এসএসসি এবং ডেস্ক বাছাই করতে পারি?


166

আমি বর্তমানে আমার জসন বাছাইয়ের জন্য আন্ডারস্কোর ব্যবহার করছি। এখন আমি একটা কাজ করতে বলা হয়েছে ascendingএবং descendingবাছাই underscore.js ব্যবহার করে। ডকুমেন্টেশনে আমি এর সাথে সম্পর্কিত কিছু দেখতে পাচ্ছি না। আমি কীভাবে এটি অর্জন করতে পারি?


1
আপনি কী বাছাই করছেন এবং কীভাবে একটি উদাহরণ যুক্ত করুন।
জন

আপনি বাছাই করছেন কি? নম্বর? স্ট্রিংস? তারিখ? অন্যকিছু?
মিউ খুব ছোট

@miistooshort আমি অবজেক্টগুলির একটি অ্যারে বাছাই করছি। সুতরাং সাজ্টবাই পদ্ধতিটি আমার মানদণ্ডকে আরোহণের সাজানোর জন্য পুরোপুরি ফিট করে তবে অন্যভাবে নয়।
রাহুল

আপনি যদি একটি সংখ্যা অনুসারে বাছাই করেন তবে আপনার sortByফাংশনটি হতে পারে return -nতবে এটি স্ট্রিংয়ের জন্য কাজ করবে না; সুতরাং আপনি কী ধরণের জিনিস বাছাই করছেন তা নিয়ে প্রশ্ন।
মিউ খুব সংক্ষিপ্ত

2
লোডাশের সাহায্যে আপনি শর্টহ্যান্ড ব্যবহার করতে পারেন _.sortBy([1,4,3,2]).reverse()বা _.chain([1,4,3,2]).sortBy().reverse().value()আপনি যদি reverse()অ্যারের প্রোটোটাইপটি ব্যবহার করতে না চান তবে ।
জিএফলে 8383

উত্তর:


363

আপনি ব্যবহার করতে পারেন .sortBy, এটি সর্বদা আরোহণের তালিকাটি ফিরিয়ে দেবে :

_.sortBy([2, 3, 1], function(num) {
    return num;
}); // [1, 2, 3]

কিন্তু আপনি ব্যবহার করতে পারেন .reverse এটি পেতে পদ্ধতি সাজানো :

var array = _.sortBy([2, 3, 1], function(num) {
    return num;
});

console.log(array); // [1, 2, 3]
console.log(array.reverse()); // [3, 2, 1]

বা সংখ্যার সাথে কাজ করার সময় তালিকায় নেমে ফিরতে নেতিবাচক চিহ্ন যোগ করুন:

_.sortBy([-3, -2, 2, 3, 1, 0, -1], function(num) {
    return -num;
}); // [3, 2, 1, 0, -1, -2, -3]

ফণা নীচে .sortByঅন্তর্নির্মিত ব্যবহার করে .sort([handler]):

// Default is ascending:
[2, 3, 1].sort(); // [1, 2, 3]

// But can be descending if you provide a sort handler:
[2, 3, 1].sort(function(a, b) {
    // a = current item in array
    // b = next item in array
    return b - a;
});

9
শেষ সমাধান অর্থাত্ ফিরে আসা সংখ্যায় নেতিবাচক চিহ্ন যোগ করা নিখুঁত।
বিনেশ

আপনি কেন এটি বুদ্বুদ সাজানোর ভাবেন? .sortBy()অন্তর্নির্মিত হুড কলগুলির অধীনে Array.sort(), যার মধ্যে অ্যালগোরিদম ব্রাউজার বিক্রেতাদের উপর নির্ভর করে তবে বুদ্বুদ সাজানোর পছন্দটি তাদের পছন্দ হতে পারে না।
রিনি সরসু

এতে কি সময়ের জটিলতা বাড়ে না? এর ফলে তালিকাটি দু'বার বাছাই করা হয়।
ব্যবহারকারী 1477388

@ ব্যবহারকারী1477388 আমি নিশ্চিত না আপনি দু'বার বাছাই করার অর্থ কী?
andlrc

@andlrc সুতরাং, আপনি যখন কল করবেন তখন _.sortBy(arr, function)আমি ধরে নিই এটি প্রতিটি আইটেমের উপরে চলে আসে এবং সাজানো অ্যারেটি ফিরিয়ে দেওয়ার জন্য কিছু যুক্তি সম্পাদন করে। তারপরে, আপনি যখন কল করবেন Array.prototype.reverse()তখন সম্ভবত প্রতিটি আইটেমের উপর আবার লুপ হয়ে যায় এবং বিপরীত অ্যারে ফিরিয়ে দেওয়ার জন্য কিছু যুক্তি সম্পাদন করে। অতএব, আপনি অ্যারে দুবার লুপ করছেন।
ব্যবহারকারী 1477388

57

আন্ডারস্কোর ব্যবহার করে অবতরণ ক্রমটি রিটার্ন মান -1 দ্বারা গুণ করে করা যেতে পারে।

//Ascending Order:
_.sortBy([2, 3, 1], function(num){
    return num;
}); // [1, 2, 3]


//Descending Order:
_.sortBy([2, 3, 1], function(num){
    return num * -1;
}); // [3, 2, 1]

আপনি যদি সংখ্যাগুলি না দিয়ে স্ট্রিংয়ের মাধ্যমে বাছাই করেন তবে আপনি ইউনিকোড মান পেতে চারকোডএট () পদ্ধতিটি ব্যবহার করতে পারেন।

//Descending Order Strings:
_.sortBy(['a', 'b', 'c'], function(s){ 
    return s.charCodeAt() * -1;
});

3
আমি বর্ণমালা অনুসারে বাছাই করার চেষ্টা করছি - -1 দ্বারা গুণ করা কোনও বৈধ ক্রিয়াকলাপ নয়। :)
rythos42

ব্যবহারের ক্ষেত্রে এটি মূল্যবান তবে প্রশ্নের ক্ষেত্রে নির্দিষ্ট নয়। তবে, স্ট্রিং -1 দ্বারা গুণ করা একটি বৈধ অপারেশন। এটি NaN প্রদান করে, যা একটি বৈধ ফলাফল।
jEremyB

1
অ্যারে ফিরেও বরাদ্দ মনে রাখবেন! SOME_ARR = _.SortBy (SOME_ARR, ফাংশন (সংখ্যা) OM SOME_FUNC ...;);
aqm

4
চরকোডএট "স্ট্রিংয়ের নির্দিষ্ট সূচকে অক্ষরের ইউনিকোড ফিরিয়ে দেবে" সুতরাং এটি স্ট্রিংয়ে অক্ষর অনুসারে বাছাই করতে ব্যবহার করা যেতে পারে, তবে প্রদর্শিত হিসাবে এটি "স্ট্রিং অনুসারে বাছাই" করে না এটি স্ট্রিংয়ের একটি অক্ষর দ্বারা সাজানো
অ্যান্টনি

2
এটি কেবল প্রথম চরিত্র অনুসারে বাছাই করে এবং এটি কেস সংবেদনশীল।
এইডান

50

এরে প্রোটোটাইপ এর বিপরীত পদ্ধতি মডিফাই অ্যারে এবং আয় এটি একটি রেফারেন্স, আপনি এটা করতে পারেন যার মানে হচ্ছে:

var sortedAsc = _.sortBy(collection, 'propertyName');
var sortedDesc = _.sortBy(collection, 'propertyName').reverse();

এছাড়াও, আন্ডারস্কোর ডকুমেন্টেশনগুলি পড়ে:

এছাড়াও, অ্যারে প্রোটোটাইপের পদ্ধতিগুলি চেইন ইন্ডারস্কোর অবজেক্টের মাধ্যমে প্রক্সি করা হয়, যাতে আপনি আপনার শৃঙ্খলে একটি reverseবা একটি স্লিপ করতে পারেন pushএবং অ্যারেটি সংশোধন করে চালিয়ে যেতে পারেন।

যার অর্থ আপনি .reverse()শিকল দেওয়ার সময়ও ব্যবহার করতে পারেন :

var sortedDescAndFiltered = _.chain(collection)
    .sortBy('propertyName')
    .reverse()
    .filter(_.property('isGood'))
    .value();

এটি সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে আসে বিপরীত / উত্থিত বাছাইয়ের সহজ পদ্ধতি are
ড্যান অ্যাটকিনসন

2
কেস-সংবেদনশীল বর্ণমালা অনুসারে বাছাই করতে:_.sortBy(collection, item => item. propertyName.toLowerCase());
XåpplI'-I0llwlg'I -

অ্যারেতে নেতিবাচক সংখ্যা থাকলে এটি কাজ করে না।
শ্রুতি কাপুর

@ শ্রুতিকাপুর হ্যাঁ তা করে। কেন হবে না?
এমিল লুন্ডবার্গ

5
কর্মক্ষমতা অনুযায়ী, প্রথমে ফিল্টারটি প্রয়োগ করা এবং তারপরে (বাকী) মানগুলি বাছাই করা ভাল।
সরান

12

অ্যান্ডস্কোর লাইব্রেরির মতোই 'লোডাশ' নামে পরিচিত আরও একটি লাইব্রেরি রয়েছে যার একটি পদ্ধতি "অর্ডারবি" রয়েছে যা এটি সাজানোর জন্য নির্ধারণ করতে প্যারামিটারে লাগে। আপনি এটি ব্যবহার করতে পারেন

_.orderBy('collection', 'propertyName', 'desc')

কোনও কারণে, এটি ওয়েবসাইট ডক্সে নথিভুক্ত নয়।


আমার মনে হয় আপনি লোটাসের সাথে আন্ডারস্কোরকে বিভ্রান্ত করেছেন । কেবলমাত্র পরবর্তীটিতে উল্লিখিত অর্ডার দ্বারা ফাংশন রয়েছে
টমাস মার্তি

হ্যাঁ, আমার খারাপ। উত্তর আপডেট করবে। সংশোধনের জন্য ধন্যবাদ :)
মিনকেশ জৈন

orderBy, সুপার দরকারী! বিপরীত ব্যবহারের চেয়ে অনেক বেশি ভাল, কারণ এটি স্থিতিশীল সাজানোর সম্পত্তিটি আমি সন্ধান করছি।
ফ্লিম

আপডেটের জন্য কোনও কারণে আমার জন্য কাজ করা হচ্ছে না: এটির লড্যাশ (
আলেক্সেলা

0

মিক্সিনসকে বুঝুন

@ এমিল_লুন্ডবার্গের উত্তরে প্রসারিত করে আপনি "মিক্সিন" লিখতেও পারেন যদি আপনি বাছাইয়ের জন্য কাস্টম ফাংশন করতে ইন্ডস্কোর ব্যবহার করছেন যদি এটি কোনও ধরণের বাছাই করা হয় তবে আপনি কোনও অ্যাপ্লিকেশনে পুনরায় পুনরায় পুনর্বার ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, সম্ভবত আপনার কাছে একটি কন্ট্রোলার রয়েছে বা "এএসসি" বা "ডিইএসসি" এর ক্রমানুসারে ফলাফল বাছাইয়ের ফলাফল রয়েছে এবং আপনি এই সাজানোর মধ্যে টগল করতে চান, আপনি এই জাতীয় কিছু করতে পারেন:

Mixin.js

_.mixin({
    sortByOrder: function(stooges, prop, order) {
      if (String(order) === "desc") {
          return _.sortBy(stooges, prop).reverse();
      } else if (String(order) === "asc") {
          return _.sortBy(stooges, prop);
      } else {
          return stooges;
      }
    }
})

ব্যবহারের উদাহরণ

var sort_order = "asc";
var stooges = [
  {name: 'moe', age: 40}, 
  {name: 'larry', age: 50}, 
  {name: 'curly', age: 60},
  {name: 'July', age: 35},
  {name: 'mel', age: 38}
 ];

_.mixin({
    sortByOrder: function(stooges, prop, order) {
    if (String(order) === "desc") {
        return _.sortBy(stooges, prop).reverse();
    } else if (String(order) === "asc") {
        return _.sortBy(stooges, prop);
    } else {
        return stooges;
    }
  }
})


// find elements
var banner = $("#banner-message");
var sort_name_btn = $("button.sort-name");
var sort_age_btn = $("button.sort-age");

function showSortedResults(results, sort_order, prop) {
    banner.empty();
    banner.append("<p>Sorting: " + prop + ', ' + sort_order + "</p><hr>")
  _.each(results, function(r) {
    banner.append('<li>' + r.name + ' is '+ r.age + ' years old.</li>');
  }) 
}

// handle click and add class
sort_name_btn.on("click", function() {
  sort_order = (sort_order === "asc") ? "desc" : "asc"; 
    var sortedResults = _.sortByOrder(stooges, 'name', sort_order);
  showSortedResults(sortedResults, sort_order, 'name');
})

sort_age_btn.on('click', function() {
    sort_order = (sort_order === "asc") ? "desc" : "asc"; 
    var sortedResults = _.sortByOrder(stooges, 'age', sort_order);
  showSortedResults(sortedResults, sort_order, 'age');
})

এখানে একটি জেএসফিডাল এটি প্রদর্শন করছে: সাস্টবি মিক্সিনের জন্য জেএসফিডাল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.