【问题标题】:How to order the item categories in Javascript如何在 Javascript 中对项目类别进行排序
【发布时间】:2015-11-25 05:59:19
【问题描述】:

我有 20 条记录

我想根据Priority 字段对记录进行排序。

Priority 字段有 3 个值(High, Medium, Low

我想分别按顺序显示High, Medium, Low记录中的记录。

下面是C# 版本 ---> 我需要在 javascript

中执行此操作
`var groupedRecords = records.OrderByDescending(x => x.Priority == "High").ThenByDescending(x > x.Priority == "Medium").ThenByDescending(x > x.Priority == "Low")`

在 Javascript 中,

var csvRecords = priorities.split(','); // 现在我得到了混合订单的 csv。我需要按顺序。 那就是我想获得首先所有高记录,然后中记录和atlast低记录。

【问题讨论】:

  • var csvRecords = priorities.split(','); 返回什么?

标签: javascript jquery arrays sorting c#-4.0


【解决方案1】:

你可以看看下面的简单代码:

var points = [{Name: "House",Priority :"High"}, {Name: "Travel",Priority :"Medium"}, {Name: "Children",Priority :"High"}, {Name: "Personal Loan",Priority :"Low"}, {Name: "Car",Priority :"Medium"}, {Name: "Shopping",Priority :"Low"}];


document.getElementById("demo").innerHTML = JSON.stringify(points);

function myFunction() {
   var priorityArray = ["High", "Medium","Low"]
    points.sort(function(a, b){
        var firstPrio = priorityArray.indexOf( a.Priority) ;
        var secPrio = priorityArray.indexOf(b.Priority)
        return firstPrio -secPrio 
    });
    document.getElementById("sortedArray").innerHTML = JSON.stringify(points);
}
<p>Click the button to sort the array.</p>

<button onclick="myFunction()">Sort it</button>
<br/><br/>
Original Array:

<p id="demo"></p>

Sorted Array:

<p id="sortedArray"></p>

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    使用常量进行排序的精简版本:

    数据:

    var data = [
        {
            name: 'Andy',
            priority: 'High'
        },
        {
            name: 'John',
            priority: 'Low'
        },
        {
            name: 'Tim',
            priority: 'Medium'
        },
        {
            name: 'Bob',
            priority: 'Medium'
        },
        {
            name: 'Lucas',
            priority: 'Medium'
        },
        {
            name: 'Mark',
            priority: 'High'
        },
        {
            name: 'Fred',
            priority: 'Low'
        }
    ];
    

    代码:

    var SORT_ASC = -1;
    var SORT_DESC = 1;
    
    function sort_by_priority ( order ) {
        var prs = ['High', 'Medium', 'Low'];
        data.sort(function ( a, b ) {
            var x = prs.indexOf(a.priority);
            var y = prs.indexOf(b.priority);
    
            if ( x < y ) return -1 * order;
            if ( x > y ) return 1 * order;
            return 0;
        });
    }
    

    测试:

    sort_by_priority(SORT_DESC);
    
    console.log(data);
    

    【讨论】:

      【解决方案3】:

      试试这个:

      Fiddle

      代码

      var data = [];
      var priority = ["low", "medium", "high"];
      
      function createData() {
        for (var i = 0; i < 10; i++) {
          var index = Math.floor((Math.random() * 10) % 3);
          var p = priority[index];
          data.push({
            "index": i,
            "Priority": p
          });
        }
      }
      
      function createLI() {
        var ul = document.getElementsByTagName("ul")[0];
        var li = "";
        data.forEach(function(row) {
          li += "<li> " + row.index + " : " + row.Priority + " </li>";
        });
        ul.innerHTML = li;
      }
      
      function sortList(sortOrder) {
        var order = (sortOrder == 'desc') ? -1 : 1;
        data.sort(function(a, b) {
          var p1, p2;
          priority.forEach(function(row, index) {
            if (a.Priority == row)
              p1 = index;
            if (b.Priority == row)
              p2 = index;
          })
          if (p1 < p2) return -1 * order;
          if (p1 > p2) return 1 * order;
          return 0;
        });
        createLI();
      }
      
      (function() {
        createData();
        createLI();
      })()
      li {
        list-style-type: none;
        padding: 5px;
        border-bottom: 1px solid #ddd;
        margin-left: -20px;
        width: 100px;
      }
      <ul></ul>
      <button onclick="sortList('asc')">Asc Sort</button>
      <button onclick="sortList('desc')">Desc Sort</button>

      【讨论】:

        【解决方案4】:

        尝试使用String.prototype.match()RegExp val + "\.\\w+(?=.*,)", "g" 来匹配val 后跟任意字符后跟任意字母数字字符;其中 val"High""Medium""Low" 存储在 Array.prototype.forEach() 内迭代的数组中,利用 Array.prototype.concat() 展平结果数组 res 包含从“高”到“中”排序的输入文本低” 。使用res.push()返回三个从“高”到“中”到“低”排序的数组

        var priorities = "High:1,Medium:2,Low:3,Low:4,Medium:5,High:6,Medium:7,"
                         + "High:8,Low:9,Low:10,Medium:11,High:12,Low:13,Medium:14,"
                         + "High:15,High:16,Low:17,Medium:18,Low:19,High:20";
        
        var keys = ["High", "Medium", "Low"], res = [];
        keys.forEach(function(val) {
          res = res.concat(priorities.match(new RegExp(val + "\.\\w+(?=.*,)", "g")))
        });
        document.body.innerHTML = JSON.stringify(res)

        【讨论】:

          猜你喜欢
          • 2016-04-02
          • 2012-09-29
          • 1970-01-01
          • 2016-02-25
          • 1970-01-01
          • 2013-06-08
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          相关资源
          最近更新 更多