লোডাশ মাল্টি-কলাম সারণি দ্বারা উতরাই


151

বেশ কয়েকটি বৈশিষ্ট্যের উপর ভিত্তি করে অবজেক্টগুলির অ্যারে বাছাই করার জন্য একটি নিফটি পদ্ধতি রয়েছে:

var data = _.sortBy(array_of_objects, ['type', 'name']);

তবে এটি কেবল আরোহণের বাছাইয়ের জন্য। প্রতি কলামে দিকনির্দেশনার কিছু সহজ উপায় আছে? যেমন

var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);

উত্তর:


329

এর মতো lodash 3.5.0 আপনি ব্যবহার করতে পারেন sortByOrder (নাম পরিবর্তিত হয়ে orderBy v4.3.0 মধ্যে):

var data = _.sortByOrder(array_of_objects, ['type','name'], [true, false]);

যেহেতু সংস্করণ 3.10.0 আপনি এমনকি ক্রম (উচ্চক্রমে, DESC) জন্য আদর্শ শব্দার্থবিদ্যা ব্যবহার করতে পারেন:

var data = _.sortByOrder(array_of_objects, ['type','name'], ['asc', 'desc']);

ইন সংস্করণ 4 lodash এই পদ্ধতি পুনরায় নাম দেওয়া হয়েছে orderBy :

var data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']);

7
আপনার তথ্যের জন্য, এই ফাংশনটির নামকরণ করা হয়েছে of.৩.০ হিসাবে লোড্যাশে _.orderBy ( লড্যাশ. com/ ডকস # অর্ডারবি )। সাধারণ সাজানোর ক্রিয়াকলাপটিকে __সোর্টবি ( লড্যাশ ডটকম্স_সোর্টবি ) বলা হয়
নিধিদিন ডেভিড

2
আমি _.sortByOrder is not a functionলোটাসের সর্বশেষ সংস্করণে পাচ্ছি।
chovy

66
কেন লোডাস ফাংশনটির নামকরণ করে রাখে?
কেনি ওয়ার্ডেন

13
, ['asc', 'desc']অংশ মাত্র lodash@4.17.10 আমার জন্য উপেক্ষা করা হচ্ছে। সবকিছু কেবল আরোহণের অনুসারে বাছাই করা হয়।
মানিনাক

4
@maninak এই জন্য _.sortBy_.orderByপরিবর্তে চেষ্টা করুন। আশাকরি এটা সাহায্য করবে.
pcasme

45

আপনি সর্বদা ব্যবহার করতে পারেন Array.prototype.reverse()

var data = _.sortBy(array_of_objects, ['type', 'name']).reverse();

হা চালাক চালাক। সংখ্যার সাজানোর জন্য আরোহণের জন্য (লোডাশ ডিফল্ট অবতরণ) আমি এটি ব্যবহার করেছি: _.sortBy (অ্যারে_অফ_বজেক্টস, "কিছু_ সংখ্যাসূচক_মূল্য_কি")। বিপরীত ()
ডিভনজ

3
কিছু ক্ষেত্রে যথেষ্ট ভাল, এর প্রভাবটি হ'ল দুটি কলামগুলিতে উত্থিত বাছাই করা, যা প্রশ্নটি জিজ্ঞাসা করে না।
ইনক্লিং

একটি উত্তর প্রস্তাব করুন? stackoverflow.com/questions/62611489/...
reacg garav

14

এটি লক্ষণীয় যে আপনি যদি নির্দিষ্ট বৈশিষ্ট্যগুলিকে অবতরণকে সাজান করতে চান তবে আপনি কেবল শেষে .revers () সংযোজন করতে চান না, কারণ এটি সমস্ত ধরণের অবতরণ করবে।

নির্দিষ্ট ধরণের অবতরণ করতে, আপনার সাজানোর ক্রমটি কমপক্ষে তাত্পর্যপূর্ণ থেকে সর্বাধিক তাৎপর্যপূর্ণ পর্যন্ত, কল করুন .revers () প্রতিটি ধরণের পরে যে আপনি অবতরণ করতে চান calling

var data = _(data).chain()
    .sort("date")
    .reverse()    // sort by date descending
    .sort("name") // sort by name ascending
    .result()

যেহেতু _ এর বাছাই একটি স্থিতিশীল বাছাই, আপনি নিরাপদে শৃঙ্খলাবদ্ধ এবং বিপরীত প্রকারের করতে পারেন কারণ যদি দুটি আইটেমের কোনও সম্পত্তির জন্য একই মান থাকে তবে তাদের ক্রম সংরক্ষণ করা হয়।

অধিক তথ্য


আপনার কাছে মন্তব্য করার মতো যথেষ্ট পরিমাণে প্রতিনিধি না থাকলে মন্তব্য করবেন না। যদিও আপনি এটিকে সত্যিকারের উত্তরের দিকে ঝুঁকছেন, যা ভাল, তবে আপনার সেই সত্যটি উল্লেখ করার দরকার নেই।
আর্টঅফকোড

একটি উত্তর প্রস্তাব করুন? stackoverflow.com/questions/62611489/...
reacg garav

13

গভীর ক্ষেত্র এবং একাধিক ক্ষেত্র এবং লোড্যাশ> 4 অর্ডার করার জন্য বিভিন্ন দিক

var sortedArray = _.orderBy(mixedArray,
                            ['foo','foo.bar','bar.foo.bar'],               
                            ['desc','asc','desc']);

আসলে এটি এখন উত্তর হবে। সাজ্টবাই আপনাকে দিকনির্দেশ দেয় না, তবে অর্ডারবাই দেয়।
পাবলো পালাসিওস

একটি উত্তর প্রস্তাব করুন? stackoverflow.com/questions/62611489/...
reacg garav

5

প্রতি কলামে দিকনির্দেশনার কিছু সহজ উপায় আছে?

না। আপনি কলব্যাক ফাংশন ব্যতীত সৃজনশীল অর্ডার নির্দিষ্ট করতে পারবেন না যা মানটিকে উল্টো করে দেয়। এমনকি এটি বহুবিধ সাজানোর পক্ষে সম্ভব নয়।

আপনি করতে সক্ষম হতে পারে

 _.each(array_of_objects, function(o) {
     o.typeDesc = -o.type; // assuming a number
 });
 _.sortBy(array_of_objects, ['typeDesc', 'name'])

অন্য কিছুর জন্য, আপনার .sort()একটি কাস্টম তুলনা ফাংশন সহ নেটিভ রিসর্ট করতে হবে :

 array_of_objects.sort(function(a, b) {
     return a.type - b.type // asc
         || +(b.name>a.name)||-(a.name>b.name) // desc
         || …;
 });

3

4.11.x সংস্করণের ডকুমেন্টেশনে, বলেছেন: This "এই পদ্ধতিটি __সোর্টবি এর মতো এটি পুনরাবৃত্তির ক্রম ক্রমগুলি সাজানোর জন্য নির্দিষ্ট করে। , অবতরণের জন্য "ডেস্ক" এর অর্ডার বা সংশ্লিষ্ট মানগুলির ক্রমবর্ধমান সাজানোর ক্রমের জন্য "asc" নির্দিষ্ট করুন "" (উত্স https://lodash.com/docs/4.17.10#orderBy )

let sorted = _.orderBy(this.items, ['fieldFoo', 'fieldBar'], ['asc', 'desc'])


আমি মনে করি আপনি ব্যবহার করতে চেয়েছিলেন _.sortByOrder?
এজে রিচার্ডসন

পরিবর্তনশীল খুঁজে পাচ্ছেন না _
বিশাল বাঘাসিয়া

একটি উত্তর প্রস্তাব করুন? stackoverflow.com/questions/62611489/...
reacg garav

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