在 javascript 中使用 sortBy 按值升序对哈希进行排序

Sort hash ascending by value using sortBy in javascript

我使用了 underscore.js 库中的 sortBy 函数。

我有散列,我尝试按以下值对其进行排序:

var obj = {x: 2, y: 6, z: 1, q: 4};
_.sortBy(obj)

但是输出如下:

[1, 2, 4, 6]

但是我需要排序,return键值如下:

{z: 1, x: 2, q: 4, y: 6}

如何使用 sortBy return 排序哈希?

我注意到 sortBy 函数 return 列表,那么是否有另一个很好的哈希排序解决方案,或者我需要实现函数 return 排序哈希?

JavaScript 中没有排序的哈希(对象)这样的东西。您可以做的是将键放入数组中,对其进行迭代并使用键访问对象属性。

var keys = Object.keys(obj);
keys.sort(function(a, b) {
    return obj[a] - obj[b]
});

keys.forEach(function(k) {
   console.log(obj[k]);
});

另外,如果想return数组降序排列,可以使用reverse()函数:

var obj = {x: 2, y: 6, z: 1, q: 4};

var keys = Object.keys(obj);
keys.sort(function(a, b) {
    return obj[a] - obj[b]
}).reverse().forEach(function(k) {
   console.log(obj[k]);
});

或者像这样(感谢@muistooshort):

var obj = {x: 2, y: 6, z: 1, q: 4};

var keys = Object.keys(obj);
keys.sort(function(a, b) {
    return obj[b] - obj[a]   //inverted comparison
}).forEach(function(k) {
   console.log(obj[k]);
});

与@Ragnar 的回答相关。我得到了解决问题的方法。和 return 排序哈希。

升序

function getSortedHash(inputHash){
  var resultHash = {};

  var keys = Object.keys(inputHash);
  keys.sort(function(a, b) {
    return inputHash[a] - inputHash[b]
  }).forEach(function(k) {
    resultHash[k] = inputHash[k];
  });
  return resultHash;
}

降序

function getSortedHash(inputHash){
  var resultHash = {};

  var keys = Object.keys(inputHash);
  keys.sort(function(a, b) {
    return inputHash[a] - inputHash[b]
  }).reverse().forEach(function(k) {
    resultHash[k] = inputHash[k];
  });
  return resultHash;
}