javascript - 我想根据属性键值对从对象返回的项目进行排序,然后为界面中的每个项目分配排名(1,2,3...等)

标签 javascript arrays object properties key

新手,有一个基本问题。这是我的目标:

{TestOne: 12, TestTwo: 6, TestThree: 4, TestFour: 2}

我使用 for-in 循环遍历它并获取属性并将其显示在我的 UI 中,如下所示:

  • 测试一:12
  • 测试二:6
  • 测试三:4
  • 测试四:2

我需要能够通过给每个项目一个数字排名(1、2、3、4...等)然后按该排名(对应于它们的实际顺序)显示它们来显示此内容。换句话说,我的用户需要在屏幕上看到的是:

  • 测试一:4
  • 测试二:3
  • 测试三:2
  • 测试四:1

不是 12,6,4,2 等。这对我来说是全新的,但我一直在尝试找出实现此目的的最佳方法,但到目前为止还没有找到任何我理解的内容。

这是我的代码。我觉得这应该很容易,但它非常令人沮丧!

 var rank = "";
    var title = objArrayTwo[i].Title;
    var summary ={};
    summary = groupBy(objArrayTwo);

    for (var prop in summary) {
        if (summary.hasOwnProperty(prop)) {
            if(title == `${prop}`){
                rank = `${summary[prop]}`;
            }   

        }
    }

    function groupBy(items){
        var result= {};
        var sum;                    
        $.each(items, function(index, item) {
        sum = result[item.RequestName] || 0;
        result[item.RequestName] = sum + parseInt(item.Rank);                     
        });
        return result;
    }

最佳答案

var obj = {TestOne: 12, TestTwo: 6, TestThree: 4, TestFour: 2};

// sort the array
var arr = Object.entries(obj);
arr.sort((a, b) => a[1] - b[1]);

// enumerate the array the index would be the rank
var arr_with_rank = arr.map((data, index) => [data[0], index+1]).reverse()

arr_with_rank.forEach(x => console.log(x[0] + ": " + x[1]));

关于javascript - 我想根据属性键值对从对象返回的项目进行排序,然后为界面中的每个项目分配排名(1,2,3...等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248977/

相关文章:

Javascript:接受对象并返回对象中描述的所有数字的列表的函数

javascript - Reactjs 在初始渲染之前安装状态还是保持原样?

javascript - 为什么这个 for-of 循​​环中的对象解构不起作用?

javascript - 如何在javascript中获取全局命名空间中的对象名称

javascript - 从 Node 端点获取数据并传递到 React 前端

javascript - 我不明白在我的代码中使用 push 与使用 unshift 之间的区别

c++ - 从文件读入数组 C++

c# - 带范围的数字的推荐组合算法

java - 使用对象的特定变量对 LinkedList 进行排序?

java - 对象传递给java中的方法