我有关联数组:
array["sub2"] = 1;
array["sub0"] = -1;
array["sub1"] = 0;
array["sub3"] = 1;
array["sub4"] = 0;
什么是按其值排序(降序)的最优雅的方法,其中结果将是一个具有相应索引的数组:
sub2, sub3, sub1, sub4, sub0
?
Javascript没有您所想到的“关联数组”。取而代之的是,您仅具有使用类似于数组的语法设置对象属性的能力(如您的示例),并且具有遍历对象属性的能力。
这样做的结果是无法保证对属性进行迭代的顺序,因此没有什么比对它们更好的了。相反,您需要将对象属性转换为“ true”数组(确实可以保证顺序)。这是一个代码片段,用于将对象转换为两个元组的数组(两个元素的数组),按照您的描述对其进行排序,然后对其进行迭代:
var tuples = [];
for (var key in obj) tuples.push([key, obj[key]]);
tuples.sort(function(a, b) {
a = a[1];
b = b[1];
return a < b ? -1 : (a > b ? 1 : 0);
});
for (var i = 0; i < tuples.length; i++) {
var key = tuples[i][0];
var value = tuples[i][1];
// do something with key and value
}
您可能会发现将其包装在需要回调的函数中更为自然:
function bySortedValue(obj, callback, context) {
var tuples = [];
for (var key in obj) tuples.push([key, obj[key]]);
tuples.sort(function(a, b) {
return a[1] < b[1] ? 1 : a[1] > b[1] ? -1 : 0
});
var length = tuples.length;
while (length--) callback.call(context, tuples[length][0], tuples[length][1]);
}
bySortedValue({
foo: 1,
bar: 7,
baz: 3
}, function(key, value) {
document.getElementById('res').innerHTML += `${key}: ${value}<br>`
});
<p id='res'>Result:<br/><br/><p>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句