使用javascript中的sortBy按值递增哈希值

Moh*_*out 6 javascript sorting hash underscore.js

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

我有哈希,我尝试按值排序,如下所示:

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

但输出如下:

[1, 2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

但是我需要对它进行排序,并返回具有以下值的键:

{z: 1, x: 2, q: 4, y: 6}
Run Code Online (Sandbox Code Playgroud)

如何使用sortBy?返回已排序的哈希?

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

小智 6

在JavaScript中没有排序哈希(对象)这样的东西.你可以做的是将键放在一个数组中,迭代它并使用键来访问对象属性.

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

keys.forEach(function(k) {
   console.log(obj[k]);
});
Run Code Online (Sandbox Code Playgroud)


Moh*_*out 5

与@Ragnar 的答案相关。我找到了解决问题的方法。并返回排序后的哈希值。

升序

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;
}
Run Code Online (Sandbox Code Playgroud)

降序

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;
}
Run Code Online (Sandbox Code Playgroud)