অর্ডার কৌণিক একাধিক ক্ষেত্রের মাধ্যমে


382

কৌণিক একই সময়ে একাধিক ক্ষেত্র ব্যবহার করে বাছাই কিভাবে? গোষ্ঠী দ্বারা উপস্থাপন এবং তারপরে উদাহরণের জন্য উপ-গ্রুপ দ্বারা

$scope.divisions = [{'group':1,'sub':1}, {'group':2,'sub':10}, {'group':1,'sub':2},{'group':1,'sub':20},{'group':2,'sub':1},
    {'group':2,'sub':11}];

আমি এটি হিসাবে প্রদর্শন করতে চেয়েছিলেন

গ্রুপ: উপ-গ্রুপ

1 - 1

1 - 2

1 - 20

2 - 1

2 - 10

2 - 11

<select ng-model="divs" ng-options="(d.group+' - '+d.sub) for d in divisions | orderBy:'group' | orderBy:'sub'" />

উত্তর:


659

দয়া করে এটি দেখুন:

http://jsfiddle.net/JSWorld/Hp4W7/32/

<div ng-repeat="division in divisions | orderBy:['group','sub']">{{division.group}}-{{division.sub}}</div>

137
orderBy:['-group','sub']groupবিপরীত ক্রম অনুসারে বাছাইয়ের জন্য ।
দিমিত্রি

1
অর্ডার বাই তালিকায় প্রথম স্থান অর্জনের জন্য কি গ্রুপের ক্ষেত্রটির অগ্রাধিকার রয়েছে?
লুচোসরক 13

5
@ লুচোসরোক, হ্যাঁ এটি প্রত্যাশার মতো করে। সরবরাহিত জেসফিল্ড সহ খেলে সহজেই নিশ্চিত হয় যে সরবরাহ করা বাছাই করা ক্ষেত্রগুলির জন্য বাছাই করা অগ্রাধিকার বাম থেকে ডান।
প্যাট্রিক রেফন্ডিনি

2
নোট করুন theচ্ছিক বিপরীত পরামিতি প্যারামিটারটি যেমন এক্সপ্রেশন প্যারামের মতো কোনও অ্যারে সমর্থন করে না, তবে আপনি এটি বাদ দিতে পারেন এবং পরিবর্তে প্রতিটি অ্যারে আইটেমের উপর বাছাই করুন যাতে তারা পৃথকভাবে বিপরীত হয় (বা না)। উদাহরণ: অর্ডারবাই: ['গ্রুপ', '-সুব'] সাধারণ ফ্যাশনে গ্রুপ অনুসারে বাছাই করবে, তারপরে বিপরীত ক্রমে সাব অনুসারে। এভাবে কিছু জটিল সংমিশ্রণ পাওয়া সম্ভব।
ড্যানিয়েল নলবাচ

1
অ্যারে আইটেমগুলিকে বুলিয়ান সম্পত্তি দিয়ে আমরা আমাদের দোকানে অগ্রাধিকার সিমুলেট করেছিলাম, তারপরে এটিকে প্রথম বিকল্প হিসাবে ব্যবহার করে। উদাহরণ: অর্ডারবাই: ['- ফিচারড', 'শিরোনাম'], যা বৈশিষ্ট্যযুক্ত সত্য আইটেমগুলি শীর্ষে রয়েছে (বর্ণানুক্রমিকভাবে), তারপরে বাকী আইটেমগুলি বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয়েছে।
ড্যানিয়েল নলবাচ


21
<select ng-model="divs" ng-options="(d.group+' - '+d.sub) for d in divisions | orderBy:['group','sub']" />

একাধিক অর্ডার বিয়ের পরিবর্তে ব্যবহারকারী অ্যারে


5

'অর্ডারবাই' ফিল্টারটি কৌণিক ব্যবহার করে বাছাই করা যায়।

দুটি উপায়: 1. দেখার থেকে 2. নিয়ামক থেকে

  1. ভিউ থেকে

বাক্য গঠন:

{{array | orderBy : expression : reverse}} 

উদাহরণ স্বরূপ:

 <div ng-repeat="user in users | orderBy : ['name', 'age'] : true">{{user.name}}</div>
  1. নিয়ামক থেকে

বাক্য গঠন:

$filter.orderBy(array, expression, reverse);

উদাহরণ স্বরূপ:

$scope.filteredArray = $filter.orderBy($scope.users, ['name', 'age'], true);

5

অ্যাংুলারজেস ফিল্টারগুলি করার 2 টি উপায় রয়েছে, একটি HTML এ using {} using ব্যবহার করে এবং প্রকৃত জেএস ফাইলগুলিতে একটি ...

আপনি ব্যবহার করে আপনার সমস্যার সমাধান করতে পারেন:

{{ Expression | orderBy : expression : reverse}}

আপনি যদি এটি এইচটিএমএল এ ব্যবহার করেন বা এমন কিছু ব্যবহার করেন:

$filter('orderBy')(yourArray, yourExpression, reverse)

বিপরীতটি শেষ পর্যন্ত isচ্ছিক, এটি একটি বুলিয়ান গ্রহণ করে এবং যদি এটি সত্য হয় তবে এটি আপনার জন্য অ্যারেটিকে বিপরীত করবে, আপনার অ্যারেটিকে বিপরীত করার খুব সহজ উপায় ...


: এছাড়াও এখানে একটি চেহারা আছে docs.angularjs.org/api/ng/filter/orderBy
আলিরেজা

0

আমি এই সহজ টুকরোটি লিখেছিলাম একটি বস্তুর একাধিক কলাম / বৈশিষ্ট্য অনুসারে বাছাই করতে। প্রতিটি ধারাবাহিক কলাম ক্লিকের সাথে কোডটি সর্বশেষ কলামটি ক্লিক করে সংরক্ষণ করে এবং এটিকে ক্লিক করা কলাম স্ট্রিংয়ের নামের ক্রমবর্ধমান তালিকায় যুক্ত করে, এগুলিকে সাজানোআরে বলে একটি অ্যারেতে রেখে। অন্তর্নির্মিত কৌণিক "অর্ডার বাই" ফিল্টারটি কেবল সর্টআরে তালিকাটি পড়ে এবং সেখানে সঞ্চিত কলামের নাম অনুসারে কলামগুলি অর্ডার করে। সুতরাং সর্বশেষ ক্লিককৃত কলামের নামটি প্রাথমিক অর্ডারযুক্ত ফিল্টার হয়ে যায়, পূর্বেরটি পরবর্তীটিকে পূর্বের মতো ক্লিক করে etc.

<script>
    app.controller('myCtrl', function ($scope) {
        $scope.sortArray = ['name'];
        $scope.sortReverse1 = false;
        $scope.searchProperty1 = '';
        $scope.addSort = function (x) {
            if ($scope.sortArray.indexOf(x) === -1) {
                $scope.sortArray.splice(0,0,x);//add to front
            }
            else {
                $scope.sortArray.splice($scope.sortArray.indexOf(x), 1, x);//remove
                $scope.sortArray.splice(0, 0, x);//add to front again
            }
        };
        $scope.sushi = [
        { name: 'Cali Roll', fish: 'Crab', tastiness: 2 },
        { name: 'Philly', fish: 'Tuna', tastiness: 2 },
        { name: 'Tiger', fish: 'Eel', tastiness: 7 },
        { name: 'Rainbow', fish: 'Variety', tastiness: 6 },
        { name: 'Salmon', fish: 'Misc', tastiness: 2 }
        ];
    });
</script>
<table style="border: 2px solid #000;">
<thead>
    <tr>
        <td><a href="#" ng-click="addSort('name');sortReverse1=!sortReverse1">NAME<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
        <td><a href="#" ng-click="addSort('fish');sortReverse1=!sortReverse1">FISH<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
        <td><a href="#" ng-click="addSort('tastiness');sortReverse1=!sortReverse1">TASTINESS<span ng-show="sortReverse1==false">&#9660;</span><span ng-show="sortReverse1==true">&#9650;</span></a></td>
    </tr>
</thead>
<tbody>
    <tr ng-repeat="s in sushi | orderBy:sortArray:sortReverse1 | filter:searchProperty1">
        <td>{{ s.name }}</td>
        <td>{{ s.fish }}</td>
        <td>{{ s.tastiness }}</td>
    </tr>
</tbody>
</table>

0

বাছাইয়ের জন্য পাইপ তৈরি করা হয়েছে। একাধিক মান অনুসারে বাছাই করে স্ট্রিং এবং অ্যারে উভয়ই গ্রহণ করে। Angular (AngularJS নয়) এর জন্য কাজ করে। উভয় স্ট্রিং এবং সংখ্যার জন্য বাছাই সমর্থন করে।

@Pipe({name: 'orderBy'})
export class OrderBy implements PipeTransform {
    transform(array: any[], filter: any): any[] {
        if(typeof filter === 'string') {
            return this.sortAray(array, filter)
        } else {
            for (var i = filter.length -1; i >= 0; i--) {
                array = this.sortAray(array, filter[i]);
            }

            return array;
        }
    }

    private sortAray(array, field) {
        return array.sort((a, b) => {
            if(typeof a[field] !== 'string') {
                a[field] !== b[field] ? a[field] < b[field] ? -1 : 1 : 0
            } else {
                a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0
            }
        });
    }
}

1
পিএস: আসলে আমার মতে বর্তমানে কেউই প্রকৃত প্রশ্নের উত্তর দেয়নি, কারণ এটি কৌণিকের জন্য ছিল, অ্যাঙ্গুলারজেএস নয়। আমার সমাধান কৌণিক 2 থেকে শুরু করে কাজ করে Ang.২.১৫ এ কৌণিকের উপর পরীক্ষিত
অ্যান্ডিস

আপনার বিবেচনা করা উচিত ক) কখন এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল, এবং খ) কৌনিক 2 কখন প্রকাশিত হয়েছিল?
নিক

@ এবং এন্ড্রিসের কোথাও হোস্ট করা কোডের উদাহরণ শেষ করার কোনও কাজ রয়েছে কি?
রোলিং পাথর

দুঃখিত, তবে না :(
অ্যান্ডিস

-8

বাছাই করা শেষ ব্যবহারকারীটির জন্য জটিল না হওয়ার বিষয়টি নিশ্চিত করুন। আমি সর্বদা ভেবেছিলাম গ্রুপ এবং সাব গ্রুপে বাছাই করা কিছুটা জটিল। যদি এটি কোনও প্রযুক্তিগত শেষ ব্যবহারকারী হয় তবে এটি ঠিক আছে।


এটি কোনও প্রাসঙ্গিক "মন্তব্য "ও নয়। নিশ্চিতভাবে প্রশ্নের উত্তর না
আফশিন মোয়াজামি

নিজেকে জিইআইআই ডেভলপমেন্ট করার সময় বর্তমান পদ্ধতির সবচেয়ে ভাল কিনা তা নিজেকে জিজ্ঞাসা করা কি ভুল? শেষ ব্যবহারকারীর অভিজ্ঞতাটি আমার কাছে প্রাসঙ্গিক বলে মনে হচ্ছে
জেনস অ্যালেনিয়াস

এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে একাধিক বৈশিষ্ট্য অনুসারে বাছাই করা ব্যবহারকারীর পক্ষে সংস্থাটি বোঝা সহজ করে তোলে। আপনি মূলত বিষয়গুলিতে বিভাগগুলিতে বিভাজন করছেন।
ওভেন জনসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.