按对象值对数组排序

Sorting a array by its object value

我想按 xp 对象对这个数组进行排序:

[
  ["438449925949489153", {
    "xp": 2
  }],
  ["534152271443415140", {
    "xp": 3
  }],
  ["955210908794236938", {
    "xp": 1
  }]
]

所以returns这个数组:

[
  ["955210908794236938", {
    "xp": 1
  }],
  ["438449925949489153", {
    "xp": 2
  }],
  ["534152271443415140", {
    "xp": 3
  }]
]

我尝试使用 sort-json npm 模块来执行此操作,但它对第一个值而不是 xp

进行了排序
const sortJson = require('sort-json');
sortJson(array)

降序排列:

arr.sort((a,b) =>{
    if (a[1].xp < b[1].xp) return 1
    else return -1
})

升序排序:

arr.sort((a,b) =>{
    if (a[1].xp < b[1].xp) return -1
    else return 1
})

您可以只使用本机 sort:

let data = [
  ["438449925949489153", {
    "xp": 2
  }],
  ["955210908794236938", {
    "xp": 3
  }],
  ["955210908794236938", {
    "xp": 1
  }]
];

const ascending = (a,b) => a[1].xp - b[1].xp;
const descending = (a,b) => b[1].xp - a[1].xp;

data.sort(ascending);

console.log(data)

data.sort(descending);

console.log(data)

注意 sort 改变了 原始数组:如果你不想这样做,你需要对原始数组执行 shallow copy数组。

我会建议更简洁的实现方式:

function compare( a, b ) {
  if ( a[1] < b[1]){
    return -1;
  }
  if ( a[1] > b[1] ){
    return 1;
  }
  return 0;
}
    
arr.sort( compare );

或one-liner:

arr.sort((a,b) => (a[1] > b[1]) ? 1 : ((b[1] > a[1]) ? -1 : 0))