如何对JS对象文字进行排序? [英] How to Sort a JS Object Literal?

查看:234
本文介绍了如何对JS对象文字进行排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有这个JS对象文字:

If I have this JS object literal:

var foo = {
    Sussy: 4,
    Billy: 5,
    Jimmy: 2,
    Sally: 1
};

如何创建新的,已排序的对象文字:

How can I create a new, sorted object literal:

var bar = {
    Sally: 1,
    Jimmy: 2,
    Sussy: 4,
    Billy: 5
};

推荐答案

Re:如何对JS对象进行排序?

Re: How to sort a JS Object?

答案:您不能.因此,您需要一个更复杂的数据结构.您有很多选择:

Answer: You can't. So instead, you need a more sophisticated data structure. You have many options:

  1. 您可以使用一个单独的数组来保存对象键的顺序. (这是@Felix Kling的答案所证明的.)良好:通过订单或名称快速检索.不好:需要第二个数据结构,该数据结构必须与第一个保持同步.
  2. 这些属性可以包含保存值和排序顺序的对象,而不是仅保存属性和值的对象.良好:1个数据结构.通过属性名称快速查找.不好:按顺序查找速度慢(需要扫描结构).排序缓慢.
  3. 使用一个数组,其元素由包含键和值的Object组成.良好:1个数据结构.按顺序快速查找.快速排序.不好:按属性名称查找很慢(需要扫描结构).

我建议解决方案3,因为它使用JS机制来管理订单.

I recommend solution 3 since it uses the JS mechanics to manage the ordering.

示例:

// Object holds sort order:  (Solution 2)
var foo = {
  Suzy: {v: 4, order: 0},
  Billy: {v: 5, order: 1},
  Jimmy: {v: 2, order: 2},
  Sally: {v: 1, order: 3}
};    

// Array holds keys: (Solution 3)
var woof = [
  {k: 'Suzy', v: 4},
  {k: 'Billy', v: 5},
  {k: 'Jimmy', v: 2},
  {k: 'Sally', v: 1}
];

// Sort the woof array by the key names:
woof.sort(function(a, b) {
  return a.k.localeCompare(b.k);
});

// The third key and value:
woof[2].k; // the third key
woof[2].v; // the third value

已已更新代码以修正错字.谢谢@Martin Fido

Edited: updated code to fix typo. Thank you, @Martin Fido

这篇关于如何对JS对象文字进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆