我需要一个类似于对象的数据结构,但在我的情况下,我需要将键作为对象自己:
tree = { { "a": 1, "t": "text }: 42 }
tree[ { 'b': true, 'c': 15 } ] = 'hello'
我可以很容易地模拟这个,如果我能够给出两个键/对象strikt weak order。但显然{ "a": 1 } < { "a": 2 }
并没有产生任何有用的东西。即使我提取键值对,并按键对它们进行排序,我也必须找到一种方法来比较关键对象中的值。
我可以将密钥字符串化为json字符串,但我不确定,如果有保证,那么当我这样做时,结果总是相同的,这个解决方案看起来有点难看对我来说。
关于如何实现这种数据结构的任何想法,提示或指示(如果可能的话,简单,高效和优雅)?
编辑:我需要这个用于发布/订阅库。要订阅的节点由对象命名。对于客户端库,我必须做一些簿记才能获得订阅状态。
举个例子,我怎么能对这个数组进行排序:
[ { a: 1 }, { b: 2 }, { a: true, b: false, c: "hello" }, { d:'yes' } ]
答案 0 :(得分:2)
但显然{“a”:1}&lt; {“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
这就是你要找的东西吗?
此外,这是一个按键排序对象数组的方法:
function compare(a,b) {
if (a.a < b.a)
return -1;
if (a.a > b.a)
return 1;
return 0;
}
arr.sort(compare);