在javascript中使用sortBy按值升序排序哈希
我使用了underline.js库中的函数 我有散列,我尝试按值对其进行排序,如下所示:在javascript中使用sortBy按值升序排序哈希,javascript,sorting,hash,underscore.js,Javascript,Sorting,Hash,Underscore.js,我使用了underline.js库中的函数 我有散列,我尝试按值对其进行排序,如下所示: var obj = {x: 2, y: 6, z: 1, q: 4}; _.sortBy(obj) [1, 2, 4, 6] {z: 1, x: 2, q: 4, y: 6} 但输出如下所示: var obj = {x: 2, y: 6, z: 1, q: 4}; _.sortBy(obj) [1, 2, 4, 6] {z: 1, x: 2, q: 4, y: 6} 但我需要对其进行排序,并返回
var obj = {x: 2, y: 6, z: 1, q: 4};
_.sortBy(obj)
[1, 2, 4, 6]
{z: 1, x: 2, q: 4, y: 6}
但输出如下所示:
var obj = {x: 2, y: 6, z: 1, q: 4};
_.sortBy(obj)
[1, 2, 4, 6]
{z: 1, x: 2, q: 4, y: 6}
但我需要对其进行排序,并返回具有以下值的键:
var obj = {x: 2, y: 6, z: 1, q: 4};
_.sortBy(obj)
[1, 2, 4, 6]
{z: 1, x: 2, q: 4, y: 6}
如何使用sortBy
返回已排序的哈希
我注意到,
sortBy
function return list,所以有没有另一个好的解决方案来排序散列,或者我需要实现函数return sorted hash JavaScript中没有排序哈希(对象)这样的东西。您可以做的是将键放入一个数组中,迭代该数组,然后使用这些键访问对象属性
var keys = Object.keys(obj);
keys.sort(function(a, b) {
return obj[a] - obj[b]
});
keys.forEach(function(k) {
console.log(obj[k]);
});
此外,如果要按降序返回数组,可以使用
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):
与@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;
}
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;
}
降序
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;
}
在js中,根据定义,对象属性的顺序是未定义的。如果没有一个数组或任何其他额外的容器来保存正确的顺序,你就不能做你想做的事情。谢谢@Ragnar。在我编辑问题之前,你已经回答了。我想返回升序,但我错误地键入:(如果值不是整数,考虑这个函数:<代码>键。排序(函数ByVar(a,b){if(Obj[a] < Obj[b])返回- 1;如果(Obj[a]>Obj[b])返回1;返回0;})