我有一个json对象,我想按升序排序
[{ d: "delte the text" }, { c: "copy the text" }]
密钥d
和c
是动态创建的,下次可能会更改。我如何将其分类为
[{ c: "copy the text" }, { d: "delte the text" }]
请帮助我如何做到这一点。 谢谢!
答案 0 :(得分:1)
要使用Array.sort
对数组进行排序,并使用适当的比较函数作为参数。比较函数接受两个参数,在这种情况下,它们应该是只有一个属性的对象。您希望根据该属性的名称进行排序。
使用Object.keys
获取对象的属性名称最方便,因此我们有这个比较函数:
function(x, y) {
var keyX = Object.keys(x)[0],
keyY = Object.keys(y)[0];
if (keyX == keyY) return 0;
return keyX < keyY ? -1 : 1;
}
可以像这样使用:
var input = [{ d: "delete the text" }, { c: "copy the text" } ];
var sorted = input.sort(function(x, y) {
var keyX = Object.keys(x)[0],
keyY = Object.keys(y)[0];
if (keyX == keyY) return 0;
return keyX < keyY ? -1 : 1;
});
<强> See it in action 强>
请注意Object.keys
需要一个相当现代的浏览器(特别是IE版本至少9个);否则你需要写一些这样的东西:
var keyX, keyY, name;
for (name in x) { keyX = name; break; }
for (name in y) { keyY = name; break; }
<强> See it in action 强>