簡體   English   中英

按屬性對數組中的javascript對象進行排序(angularjs過濾器)

[英]Sorting javascript objects in array by properties (angularjs filter)

我正在嘗試按angularjs應用程序的屬性對javascript對象數組進行排序。 我需要能夠按數字和字符串排序。

到目前為止,我已經擴展了該線程中提供的Armin的篩選器,以對數字和字符串進行排序(請參見下面的代碼)。

我仍然缺少的是將嵌套屬性(如user.surname )賦予過濾器的功能。 它應該是動態的,這樣我就可以為其提供任何深度的嵌套屬性。 有沒有辦法做到這一點?

這是我的過濾器代碼:

angular.module('app')
    .filter('orderObjectBy', function(){
        return function(input, filterBy) {
            if (!angular.isObject(input)) return input;

            var attribute = filterBy;
            var reverse = false;

            if (filterBy.substr(0,1) == '-') {
                attribute = filterBy.substr(1);
                reverse = true;
            }

            var array = [];
            for(var objectKey in input) {
                array.push(input[objectKey]);
            }

            if (parseInt(array[0][attribute])) {
                array.sort(function(a, b){
                    a = parseInt(a[attribute]);
                    b = parseInt(b[attribute]);
                    return a - b;
                });
            } else {
                array.sort(function (a,b) {
                    if (a[attribute] < b[attribute]) {
                        return -1;
                    } else if (a[attribute] > b[attribute]) {
                        return 1;
                    } else {
                        return 0;
                    }
                });
            }

            if (reverse) {
                return array.reverse();
            } else {
                return array;
            }

        }
    });

它很簡單直接檢查一下: http : //jsbin.com/duzurazo/2/edit

您可以使用類似

  <li ng-repeat="prop in props | orderBy:'order.v'"> {{prop.order.v}} </li>

那里的模型就像

  $scope.props = [{order:{v:"1"}},{order:{v:"5"}},{order:{v:"2"}}];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM