在 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;
}
我使用了 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;
}