Javascript 我需要一种排序对象的方法

Javascript 我需要一种排序对象的方法,javascript,coffeescript,Javascript,Coffeescript,我需要一个数据结构,类似于一个对象,但在我的例子中,我需要键本身就是对象: tree = { { "a": 1, "t": "text }: 42 } tree[ { 'b': true, 'c': 15 } ] = 'hello' 如果我能给出两个键/对象,我可以很容易地模拟这个。但是显然,{“a”:1}

我需要一个数据结构,类似于一个对象,但在我的例子中,我需要键本身就是对象:

tree = { { "a": 1, "t": "text }: 42 }
tree[ { 'b': true, 'c': 15 } ] = 'hello'
如果我能给出两个键/对象,我可以很容易地模拟这个。但是显然,
{“a”:1}<{“a”:2}
并没有产生任何有用的结果。即使我提取键值对,并按键对它们进行排序,我也必须找到一种方法来比较键对象中的值

我可以将json字符串的键字符串化,但我不确定,如果有保证的话,当我这样做时,结果总是一样的,而且这个解决方案在我看来有点难看

关于如何实现这种数据结构(如果可能的话,简单、高效、优雅)有什么想法、技巧或建议吗

编辑:我需要一个发布/订阅库。要订阅的节点由对象命名。对于客户端库,我必须进行一些簿记以了解订阅的状态

例如,如何对该数组进行排序:

[ { a: 1 }, { b: 2 }, { a: true, b: false, c: "hello" }, { d:'yes' } ]
但是显然{“a”:1}<{“a”:2}不会产生任何有用的结果。即使我提取键值对,并按键对它们进行排序,我也必须找到一种方法来比较键对象中的值

您不能比较对象,但可以编写一个函数来检查一个对象与另一个对象的值:

var arr = [
  { "a": 1 },
  { "a": 2 }
];

function test(obj1, obj2){
  return obj1.a < obj2.a;
}

console.log(test(arr[0], arr[1])); // true
var-arr=[
{“a”:1},
{“a”:2}
];
功能测试(obj1、obj2){
返回obj1.a

这就是你要找的吗

此外,还有一种按键对对象数组进行排序的方法:

function compare(a,b) {
  if (a.a < b.a)
    return -1;
  if (a.a > b.a)
    return 1;
  return 0;
}

arr.sort(compare);
功能比较(a、b){
如果(a.ab.a)
返回1;
返回0;
}
arr.sort(比较);

JavaScript有数组和对象,这就是数据结构。你能给出一个你为什么需要这个的真实例子吗?您应该能够以某种方式用JS表示您的结构,并使用有效的语法。@elclars是的,但是您如何给两个对象一个顺序?如果您的意思是这样的话,您可以使用一个集合(一个对象数组)。@elclars是的,这是可能的,但是对于线性搜索,我必须比较对象是否相等,对于二进制搜索,我需要严格的弱命令。这就是我在这里问的原因。你真的需要能够对任意对象进行排序,还是将它们散列成字符串,这样你就可以将它们用作对象键?因为对象充当键,而键是由用户应用程序提供的,我事先不知道这些键有什么键,也不可能这些键都有相同的键。我将添加一个示例。谢谢!