【问题标题】:How to sort an array of objects in particular order in jquery [duplicate]如何在jquery中按特定顺序对对象数组进行排序[重复]
【发布时间】:2018-07-25 15:00:57
【问题描述】:

您好,我想按特定顺序对一组对象进行排序。我在排序前给出数组:

var arrayBeforeSort = [
    {simulationID: '45679', colorName:'Green'},
    {simulationID: '45672', colorName:'red'},
    {simulationID: '45676', colorName:'yellow'},
    {simulationID: '45675', colorName:'Green'},
    {simulationID: '45677', colorName:'default'},
    {simulationID: '45673', colorName:'red'},
    {simulationID: '45680', colorName:'Green'},
    {simulationID: '45678', colorName:'default'}
]

我想这样排序:

var arrayAfterSort = [
    {simulationID: '45679', colorName:'Green'},
    {simulationID: '45675', colorName:'Green'},
    {simulationID: '45680', colorName:'Green'},
    {simulationID: '45672', colorName:'red'},
    {simulationID: '45673', colorName:'red'},
    {simulationID: '45676', colorName:'yellow'},
    {simulationID: '45677', colorName:'default'},
    {simulationID: '45678', colorName:'default'}
]

所以基本上我想按照以下顺序对数组进行排序。先是绿色,然后是红色,然后是黄色,然后是默认值。所以排序顺序将是Green,Red,Yellow,Default

【问题讨论】:

  • 你有没有尝试过自己排序,也许是使用.sort

标签: javascript jquery arrays


【解决方案1】:

您可以简单地使用Arrays.sort() 并使用顺序数组按照顺序数组指定的顺序对数组进行排序。

尝试以下方法:

var arrayBeforeSort = [ {simulationID: '45679', colorName:'Green'}, {simulationID: '45672', colorName:'red'}, {simulationID: '45676', colorName:'yellow'}, {simulationID: '45675', colorName:'Green'}, {simulationID: '45677', colorName:'default'}, {simulationID: '45673', colorName:'red'}, {simulationID: '45680', colorName:'Green'}, {simulationID: '45678', colorName:'default'} ];

var order = ["Green","red","yellow","default"];
 
arrayBeforeSort.sort((a,b)=> order.indexOf(a.colorName) - order.indexOf(b.colorName));
 
console.log(arrayBeforeSort);

【讨论】:

    【解决方案2】:

    您可以指定像sortOrder 这样的对象来提及排序值的数值,以便它们可以在sort() 函数中使用:

    var arrayBeforeSort = [
        {simulationID: '45679', colorName:'Green'},
        {simulationID: '45672', colorName:'red'},
        {simulationID: '45676', colorName:'yellow'},
        {simulationID: '45675', colorName:'Green'},
        {simulationID: '45677', colorName:'default'},
        {simulationID: '45673', colorName:'red'},
        {simulationID: '45680', colorName:'Green'},
        {simulationID: '45678', colorName:'default'}
    ];
    var sortOrder = {
      'Green': 1,
      'red' : 2,
      'yellow' : 3,
      'default' : 4
    };
    
    arrayBeforeSort.sort(function(a, b){
      return sortOrder[a.colorName] - sortOrder[b.colorName];
    });
    console.log(arrayBeforeSort);

    【讨论】:

      【解决方案3】:

      首先,根据您想要的结果定义颜色值。从那里,您可以比较它们。

      var colorArray = [];
      colorArray['Green'] = 0;
      colorArray['red'] = 1;
      colorArray['yellow'] = 2;
      colorArray['default'] = 3;
      console.log(arrayBeforeSort.sort(function(a,b){
          return colorArray[a.colorName] > colorArray[b.colorName];
      }));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        相关资源
        最近更新 更多