对具有随机值的对象数组进行排序

时间:2021-06-03 21:33:17

标签: javascript

这里的新手。我需要对随机对象数组进行排序(将数据传递给我构建的机器)。如何做到这一点?

var array = [{fgy : 34}, {sor : 56}, {dtr : 45}];

array.sort(function(a, b){return a- b;}); // 当然不行了

预期结果:

fgy : 34, dtr : 45, sor : 56

2 个答案:

答案 0 :(得分:3)

如果您确定每个对象中只有一个键,并且您想要排序的只是值,那么您可以这样做:

var array = [{fgy : 34}, {sor : 56}, {dtr : 45}];

let sorted = array.slice().sort((a,b) => {
  let aVal = Object.values(a)[0];
  let bVal = Object.values(b)[0];
  return aVal - bVal;
});

console.log(sorted)

如果每个对象上可以有多个键,您只需要决定要排序的内容并将其用于 aVal 函数中的 bVal.sort()。例如,如果您想按最大值排序,您可以执行类似 let aVal = Math.max(...Object.values(a)); 的操作,类似地,您可以执行值的总和、最小值等。您只需要分配 a< /em> 值到您的 aValbVal,然后返回比较。

ES5 语法版本(在评论中要求)

var array = [{fgy : 34}, {sor : 56}, {dtr : 45}];

let sorted = array.slice().sort((a,b) => {
  var aVal = a[Object.keys(a)[0]];
  var bVal = b[Object.keys(b)[0]];
  return aVal - bVal;
});

console.log(sorted)

答案 1 :(得分:0)

可以使用Array.sort方法,但是需要获取数组中每个Object内部的值。 您可以使用 Object.values(obj)[0] 来完成。 哪个将返回对象中的第一个值

例如:

let obj = { fgy: 34 }
console.log(Object.values(obj)[0]) // returns 34

然后就可以用sort方法了:

array.sort((a, b) => {
  return Object.values(a)[0] - Object.values(b)[0]
})