【问题标题】:Re arrange array of objects by specific value at top?在顶部按特定值重新排列对象数组?
【发布时间】:2022-06-10 19:13:40
【问题描述】:
var objs = [ 
    { Product: 'Lazslo', Status: Approved     },
    { Product: 'Pig',    Status: Rejected  },
    { Product: 'Pirate',Status: Pending }
];

如何在 JavaScript 中按状态对它们进行排序?

我知道 sort(a,b),但这似乎只适用于 asc 或 desc ?

我的输出想要这样

[{ Product: 'Pirate',Status: Pending }
 { Product: 'Lazslo', Status: Approved },
 { Product: 'Pig',   Status: Rejected  }];

【问题讨论】:

  • @ale917k 它不工作。

标签: javascript arrays sorting


【解决方案1】:

您可以使用对象为每个状态定义优先级,并使用Array#sort 对数组进行排序:

const statusScores = { 'Pending': 3, 'Rejected': 2, 'Approved': 1 };
const arr = [ { Product: 'Lazslo', Status: 'Approved' }, { Product: 'Pig', Status: 'Rejected' }, { Product: 'Pirate', Status: 'Pending' } ];

const res = arr.sort(({ Status: a }, { Status: b }) => statusScores[b] - statusScores[a]);

console.log(res);

【讨论】:

    【解决方案2】:

    var objs = [ 
        { Product: 'Lazslo', Status: "Approved" },
        { Product: 'Pig',    Status: "Rejected" },
        { Product: 'Pirate', Status: "Pending"  }
    ];
    
    var priority = ["Pending", "Approved", "Rejected"];
    
    objs.sort( ( a, b ) => priority.indexOf( a.Status ) - priority.indexOf( b.Status ) );
    
    console.log(objs);

    可以重构为可重用:

    var objs = [ 
        { Product: 'Lazslo', Status: "Approved" },
        { Product: 'Pig',    Status: "Rejected" },
        { Product: 'Pirate', Status: "Pending"  }
    ];
    
    var statusPriority = ["Pending", "Approved", "Rejected"];
    
    const sortBy = (arr, priorityArr, propertyName) => 
      arr.sort( ( a, b ) => priorityArr.indexOf( a[propertyName] ) - priorityArr.indexOf( b[propertyName] ) );
    
    console.log(sortBy(objs, statusPriority, "Status"));

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 2017-10-04
      • 1970-01-01
      • 2017-12-27
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      相关资源
      最近更新 更多