我有关联数组:
array["sub2"] = 1;
array["sub0"] = -1;
array["sub1"] = 0;
array["sub3"] = 1;
array["sub4"] = 0;
按其值排序(降序)的最优雅方法是什么,结果将是一个数组,其中相应的索引按此顺序排列:
sub2, sub3, sub1, sub4, sub0
原文由 John Smith 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有关联数组:
array["sub2"] = 1;
array["sub0"] = -1;
array["sub1"] = 0;
array["sub3"] = 1;
array["sub4"] = 0;
按其值排序(降序)的最优雅方法是什么,结果将是一个数组,其中相应的索引按此顺序排列:
sub2, sub3, sub1, sub4, sub0
原文由 John Smith 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为这就是您想要的,而不是在“关联数组”的语义上纠正您:
function getSortedKeys(obj) {
var keys = Object.keys(obj);
return keys.sort(function(a,b){return obj[b]-obj[a]});
}
对于 真正的旧浏览器,请改用它:
function getSortedKeys(obj) {
var keys = []; for(var key in obj) keys.push(key);
return keys.sort(function(a,b){return obj[b]-obj[a]});
}
你转储一个对象(像你的)并得到一个键数组 - 呃属性 - 返回,按(数字)值的(数字)值降序排列,呃,对象的值。
这仅在您的值是数字时才有效。 Tweek the little function(a,b)
在那里改变排序机制以工作升序,或工作 string
值(例如)。留给读者作为练习。
原文由 commonpike 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
Javascript 没有您想象的那样的“关联数组”。相反,您只需能够使用类似数组的语法(如您的示例)设置对象属性,以及迭代对象属性的能力。
这样做的结果是无法保证您迭代属性的 _顺序_,因此没有什么比它们更合适的了。相反,您需要将对象属性转换为“真正的”数组(保证顺序)。这是一个代码片段,用于将对象转换为二元组数组(双元素数组),按照您的描述对其进行排序,然后对其进行迭代:
您可能会发现将它包装在一个接受回调的函数中更自然: