如何在Javascript中排序项目类别

How to order the item categories in Javascript

本文关键字:项目 排序 Javascript      更新时间:2023-09-26

我有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。我需要按顺序。也就是说,我想先获取所有高记录,然后获取中等记录,最后获取Low记录。

您可以查看以下简单代码:

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>

我希望它能对你有所帮助。

使用常量排序的浓缩版本:

数据:

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);

试试这个:

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>

尝试使用String.prototype.match()RegExp val + "'.''w+(?=.*,)", "g"来匹配val后面跟着任何字符后面跟着任何字母数字字符;其中,val是存储在Array.prototype.forEach()内迭代的数组中的"High""Medium""Low",使用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)