首页 > 解决方案 > 如何按值排序和排列?例如前 4 比 2 比 16

问题描述

我试过这个已知的

 test.sort(function (a, b) {
    var textA = a[0].Val1;
    var textB = b[0].Val1;
    if (textA > textB)
        return -1;
    if (textA < textB)
        return 1;
    return 0;
});

但我想看到这样的排序数组

{name: 'John', Val1: 4, hireDate: "July 1, 2010"},
{name: 'XXX', Val1: 4, hireDate: "August 15, 2009"},
{name: 'YYY', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 2, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
{name: 'Ana', Val1: 1, hireDate: "December 12, 2011"}

标签: javascriptarrayssortingobjectkey-value

解决方案


您可以在单独的scores列表中定义顺序,并按.indexOf如下方式使用:

const test = [
  {name: 'John', Val1: 4, hireDate: "July 1, 2010"},
  {name: 'XXX', Val1: 4, hireDate: "August 15, 2009"},
  {name: 'YYY', Val1: 2, hireDate: "August 15, 2009"},
  {name: 'ZZZ', Val1: 2, hireDate: "August 15, 2009"},
  {name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
  {name: 'ZZZ', Val1: 16, hireDate: "August 15, 2009"},
  {name: 'Ana', Val1: 1, hireDate: "December 12, 2011"}
];
const scores = [4,2,16];
const MAX = scores.length;

const sorted = test.sort((a, b) => {

  let indexOfA = scores.indexOf(a.Val1);
  indexOfA = (indexOfA >= 0) ? indexOfA : MAX;
  
  let indexOfB = scores.indexOf(b.Val1);
  indexOfB = (indexOfB >= 0) ? indexOfB : MAX;
  
  return indexOfA - indexOfB;
});

console.log(sorted);


推荐阅读