【问题标题】:Sorting data by multiple fields and conditions按多个字段和条件对数据进行排序
【发布时间】:2021-01-16 23:55:20
【问题描述】:

我想按照以下条件对数据进行排序:

  1. type 排序,优先级为[州、市、区]。

    -state 类型的数据应该放在第一位,然后是 city 的数据等等。

  2. 重复数据应按score排序。

    -eg : 如果 3 行有类型,则按分数排序。

我的数据对象是:

$scope.data = [{
 id: 1,
 name: 'ABC',
 type: 'city',
 score: 0.1
}, {
 id: 2,
 name: 'PQR',
 type: 'city',
 score: 0.7
}, {
 id: 3,
 name: 'ABC',
 type: 'state',
 score: 0.3
});

模板是:

<div ng-repeat="d in data">
 <span>{{d.name}}</span>
 <span>{{d.type}}</span>
 <span>{{d.score}}</span>
</div>

结果应该是这样的:

ABC state 0.3
PQR city 0.7
ABC city 0.1

Here是plunker的链接。

我想按多个字段以及特定的优先级对其进行排序。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • Stack Overflow不是免费的代码编写服务。您应该尝试自己编写代码。在doing more research 之后,如果您有问题,您可以发布您尝试过的内容清楚地解释什么不起作用,并提供一个minimal reproducible example 。我建议阅读How to Ask 一个好问题和the perfect question。另外,请务必使用tour
  • 我尝试使用循环对其进行排序。但这似乎不是更好的方法。我想要一种有效的方法。
  • 我必须按具有特定优先级的多个字段对其进行排序。它应该以这种方式按type 排序:state, city, district
  • Kiran 看起来你对这个问题有一个非常清晰的认识。您究竟在哪里遇到了解决问题?

标签: javascript angularjs angularjs-ng-repeat


【解决方案1】:

//这是我的代码。我认为这段代码解决了你的问题

  var tempFlag = {'state':1, 'city':2, 'district':3}
  $scope.data=[
    {
     id: 1,
     name: 'ABC',
     type: 'city',
     score: 0.1
    }, {
     id: 2,
     name: 'PQR',
     type: 'city',
     score: 0.7
    }, {
     id: 3,
     name: 'ABC',
     type: 'state',
     score: 0.3
    }
    ].sort(function(a, b) {
        if(a.type == b.type)
           return a.score < b.score;
       return tempFlag[a.type] > tempFlag[b.type];
    });

【讨论】:

  • 我不认为这条鱼会游泳......代码块本身通常不是有用的答案,而且更有可能吸引反对票。请解释您所展示的解决方案的作用,以及该代码为何/如何回答问题。
【解决方案2】:

您可以在 lodash 库中找到所需的一切。

这是文档:https://lodash.com/docs/4.17.4

orderBy 方法是您的起点:https://lodash.com/docs/4.17.4#orderBy

解决您的问题:

$scope.data = lodash.orderBy($scope.data, ['type','score'], ['desc', 'desc']);

您可以将 ngLodash 用于 angularjs(使用 bower / npm 进行简单安装):https://github.com/rockabox/ng-lodash

享受吧!

【讨论】:

  • 我不明白你的意思。问题是关于以角度对数据进行排序。还是我错过了关于 VanillaJS 的一些东西(我听说过,从未使用过)? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
相关资源
最近更新 更多