当前位置: 首页 > 面试题库 >

如何通过Javascript中的值对关联数组进行排序?

徐承载
2023-03-14
问题内容

我有关联数组:

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版本之后: