代码之家  ›  专栏  ›  技术社区  ›  Ali Zia

如何对键数组进行排序:基于对象值的对象

  •  -2
  • Ali Zia  · 技术社区  · 7 年前

    我有这样的数据

    enter image description here

    我想这样分类

    $initialArrayBTC.sort(function (a, b) {
        return b.q - a.q //Trying to sort is on the base of "q" in descending order
    });
    

    但这似乎不起作用,尽管我看了许多stackoverflow答案有人能帮我什么忙吗?

    编辑 这是我所有的数据

    示例代码

    var $initialArrayBTC = [];
    $initialArrayBTC['A'] = {
      q: "3598"
    };
    $initialArrayBTC['B'] = {
      q: "123"
    };
    $initialArrayBTC['C'] = {
      q: "9999"
    };
    console.log($initialArrayBTC);
    
    $initialArrayBTC.sort(function(a, b) {
      return b.q - a.q //Trying to sort is on the base of "q" in descending order
    });
    
    console.log($initialArrayBTC);

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nina Scholz    7 年前

    可以通过按所需顺序创建属性来构建新对象,但这可能仅适用于不将整数(数字作为数组的索引)作为键的情况,也可能不适用于所有浏览器。


    您可以获取一个对象,然后获取它的键,对它们进行排序,并使用排序后的键进行排序输出。

    var $initialArrayBTC = {};
    
    $initialArrayBTC['A'] = {q: "3598"};
    $initialArrayBTC['B'] = {q: "123"};
    $initialArrayBTC['C'] = {q: "9999"};
    
    var keys = Object.keys($initialArrayBTC).sort(function (a, b) {
      return $initialArrayBTC[b].q - $initialArrayBTC[a].q;
    });
    
    keys.forEach(k => console.log($initialArrayBTC[k]));
        2
  •  1
  •   Jeto    7 年前

    看起来您的初始实例是一个对象,而不是一个数组您可以获取其键,按值对键进行排序,然后重新生成对象:

    const $initialArrayBTC = {
      A: {q: '3598'}, 
      B: {q: '123'},
      C: {q: '9999'}
    };
    
    const result = Object.keys($initialArrayBTC)
      .sort((key1, key2) => $initialArrayBTC[key2].q - $initialArrayBTC[key1].q)
      .map(key => ({[key]: $initialArrayBTC[key]}));
    
    console.log(result);