我有关联数组:
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>
问题内容: 我有这种格式的数组: 如何按该字段的降序对该格式的数组排序?是否有内置功能? 问题答案: 使用并提供您自己的功能进行订购,例如
问题内容: 给定此数组: 我想按价格对元素进行排序以获得: 我怎样才能做到这一点? 问题答案: 没错,您要寻找的功能是。 以下是直接取自手册并适合您的情况的示例: 从PHP 5.5.0开始,您可以使用array_column()代替foreach
问题内容: 可以说我们有一个名为imageFile的自定义类,该类包含两个属性。 其中很多存储在数组中 问题是:如何按“ fileID” ASC或DESC对图像数组进行排序? 问题答案: 首先,将Array声明为类型化数组,以便在迭代时可以调用方法: 然后,您可以简单地执行以下操作: 迅捷2 迅捷3+ 上面的示例给出了 desc 排序顺序
问题内容: 我需要使用JavaScript来存储一些统计信息,就像在C#中那样: JavaScript中是否有类似的东西? 如何以这种方式存储值? 问题答案: 使用JavaScript对象作为关联数组。 关联数组:简单来说,关联数组使用String而不是Integer数字作为索引。 创建一个对象 Javascript允许您使用以下语法向对象添加属性: 相同的替代语法是: 如果您还可以使用以下语法创
问题内容: 我有一个数组: 我尝试使用PHP进行各种功能来实现此数组结构: 它由数组值和键/值保持的顺序。有任何想法吗? 问题答案: 这应该使用asort()起作用: 输出:
问题内容: 我已经使用AJAX获得了以下对象并将它们存储在数组中: 如何仅使用JavaScript 创建一个函数以按属性 升序 或 降序 对对象进行排序? 问题答案: 按价格升序对房屋进行排序: 或在ES6版本之后: