gpt4 book ai didi

javascript - angularjs - orderBy 自定义比较器

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:06 25 4
gpt4 key购买 nike

我正在尝试显示一个基于可能需要比较多个字段的排序函数的值列表,因此标准的单参数函数对我来说不够用。

我希望带有描述的项目位于列表的顶部(无论描述是什么)以及上半部分(有描述)和下半部分(无描述)我想要按名称的字母顺序排列.

我有这样的东西:

<div ng-repeat="item in items | orderBy:memberSort">
{{item.sortName}} / {{item.description}}
</div>

和比较器:

$scope.memberSort = function(m1, m2) {
if (m1.description && !m2.description) {
return -1;
}
if (m2.description && !m1.description) {
return 1;
}
return m1.sortName.localCompare(m2.sortName);
};

我怎样才能使用这样的比较器而不只是单参数值函数?在上面的代码中,参数 m2 始终未定义。

这是一个 jsfiddle:https://jsfiddle.net/1Lwg4s2r/15/

虽然这只是当前的 1 个问题,但普遍的问题是如何定义一个接受 2 个值的比较器函数,而不仅仅是一个将复杂对象映射到一个值的单参数函数?

最佳答案

您必须指定 memberSort 比较器作为 orderBy 的第三个参数:

angular.module('app', []).controller('myController', function($scope) {
$scope.items = [
{ description: '', sortName: 'Bob' },
{ description: '', sortName: 'Steve' },
{ description: '', sortName: 'Mark' },
{ description: 'Member', sortName: 'Kirk' },
{ description: 'Boss', sortName: 'Joe' }
];
$scope.memberSort = function(o1, o2) {
var m1 = o1.value, m2 = o2.value;
if (m1.description && !m2.description)
return -1;
if (m2.description && !m1.description)
return 1;
return m1.sortName.localeCompare(m2.sortName);
};
});
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>

<div ng-app='app' ng-controller="myController">
<div ng-repeat="item in items | orderBy: 'valueOf()' : false : memberSort">
{{item.sortName}} / {{item.description}}
</div>
</div>

关于javascript - angularjs - orderBy 自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com