排序功能打破了序列

时间:2017-12-27 09:26:13

标签: javascript

我有一个有一些价值的物品。

var x = {  
           'A': 4.5,
           'B': 2,
           'C': 4.5,
           'D': 2,
           'E': 2,
           'F': 2,
           'G': 2,
           'H': 4.5,
           'I': 2.5,
           'J': 2.5,
           'K': 2.5,
           'L': 2.5,
           'M': 2.5,
           'N': 2.5,
           'O': 2.5,
           'P': 2.5 
        }

现在我想用正确的键值序列对其进行排序。期望的结果应该是这样的

{  
               'A': 4.5,
               'H': 4.5,
               'I': 2.5,
               'J': 2.5,
               'K': 2.5,
               'L': 2.5,
               'M': 2.5,
               'N': 2.5,
               'O': 2.5,
               'P': 2.5,
               'B': 2,
               'D': 2,
               'E': 2,
               'F': 2,
               'G': 2,
            }

我试图这样做,但我无法按顺序排序结果。我的代码是

const valueholder = Object.keys(x).map(key => ({ name: key, value: x[key] })).sort((f, s) => s.value - f.value);

通过此值进行排序,但不按顺序方式排序。我得到的就是这个。

[ { name: 'A', value: 4.5 },
  { name: 'C', value: 4.5 },
  { name: 'H', value: 4.5 },
  { name: 'O', value: 2.5 },
  { name: 'N', value: 2.5 },
  { name: 'M', value: 2.5 },
  { name: 'L', value: 2.5 },
  { name: 'P', value: 2.5 },
  { name: 'K', value: 2.5 },
  { name: 'J', value: 2.5 },
  { name: 'I', value: 2.5 },
  { name: 'B', value: 2 },
  { name: 'G', value: 2 },
  { name: 'F', value: 2 },
  { name: 'E', value: 2 },
  { name: 'D', value: 2 } ]

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您也可以使用相同的属性值对键进行排序。

var x = { A: 4.5, B: 2, C: 4.5, D: 2, E: 2, F: 2, G: 2, H: 4.5, I: 2.5, J: 2.5, K: 2.5, L: 2.5, M: 2.5, N: 2.5, O: 2.5, P: 2.5 },
    order = Object
        .keys(x)
        .sort((a, b) => x[b] - x[a] || a.localeCompare(b));
        //              ^^^^^^^^^^^                        value part
        //                             ^^^^^^^^^^^^^^^^^^  key part

console.log(order);