AngularJS按特定属性值排序

时间:2014-04-02 20:29:52

标签: arrays angularjs sorting filter

我的问题很简单,但我还没有找到答案。

我有这个数组:

        myArray = [
        {
            id: '123',
            color: 'red'
        },
        {
            id: '234',
            color: 'blue'
        },
        {
            id: '345',
            color: 'red'
        },
        {
            id: '456',
            color: 'yellow'
        }
        ]

我想先将这个数组命名为“color:'red'”,并保持其他数组的顺序相同。我希望它是:

        myArray = [
        {
            id: '123',
            color: 'red'
        },
        {
            id: '345',
            color: 'red'
        },
        {
            id: '234',
            color: 'blue'
        },
        {
            id: '456',
            color: 'yellow'
        }
        ]

我尝试使用Angular的$ filter,并找到了这样做的方法:

$filter('orderBy')(myArray, function(records) {
            return records.color !== 'red';
        });

我发现这个解决方案只是在玩,但我真的不明白为什么会这样。我相信应该有一个更好,更容易理解的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:4)

有效的原因是javascript中的false小于true,因此红色将在其余部分之前出现。

解决此问题的另一种方法是在您的作用域上使用orderBy过滤器可以使用的函数:

$scope.redsFirst = function(record){
    return record.color !== 'red';
}

在视图中:

ng-repeat='record in records | orderBy:redsFirst'

Fiddle