如何根据对象值对key数组进行排序

时间:2018-07-24 06:22:28

标签: javascript sorting

我有这样的数据

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 个答案:

答案 0 :(得分:2)

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


您可以先获取一个对象,然后对其进行键控,对它们进行排序,然后将已排序的键用于已排序的输出。

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]));

答案 1 :(得分:1)

看起来您的初始实例是一个对象,而不是数组。您可以抓取其键,按值对键排序,然后重建对象:

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);