Javascript 如何按子对象值对对象中的对象进行排序?

Javascript 如何按子对象值对对象中的对象进行排序?,javascript,Javascript,我有一个这样的物体: let objectExample = { key1: { prop1: '123', prop2: 'def' }, key2: { prop1: '456', prop2: 'ghi' }, key3: { prop1: '789', prop2: 'abc' } }; 按prop2的值排序后,需要这样 let objectSorted = { key3: { prop1: '789', prop2: 'abc' }, key1

我有一个这样的物体:

let objectExample = {
    key1: { prop1: '123', prop2: 'def' },
    key2: { prop1: '456', prop2: 'ghi' },
    key3: { prop1: '789', prop2: 'abc' }
};
prop2
的值排序后,需要这样

let objectSorted = {
    key3: { prop1: '789', prop2: 'abc' },
    key1: { prop1: '123', prop2: 'def' },
    key2: { prop1: '456', prop2: 'ghi' }
};
我在这里看到了一些例子,但它们现在看起来太难读了,让我作为初学者感到害怕:D
还有一个我见过的问题,六年前有人问过

无法对对象属性进行排序,它们没有索引顺序。如果要保持元素的特定顺序,必须使用数组,而不是对象。下面是一个示例,如何按字母顺序对数组排序:

let arresample=[
{prop1:'123',prop2:'def'},
{prop1:'456',prop2:'ghi'},
{prop1:'789',prop2:'abc'}
];
arrExample.sort(函数(a,b){
如果(a.prop2b.prop2)返回1;
返回0;
})

console.log(arresample)无法对对象属性进行排序,它们没有索引顺序。如果要保持元素的特定顺序,必须使用数组,而不是对象。下面是一个示例,如何按字母顺序对数组排序:

let arresample=[
{prop1:'123',prop2:'def'},
{prop1:'456',prop2:'ghi'},
{prop1:'789',prop2:'abc'}
];
arrExample.sort(函数(a,b){
如果(a.prop2b.prop2)返回1;
返回0;
})

console.log(arresample)对不起,我现在没有笔记本电脑。但是下面的代码应该会有所帮助

let objectExample = { key1: { prop1: '123', prop2: 'def' }, key2: { prop1: '456', prop2: 'ghi' }, key3: { prop1: '789', prop2: 'abc' } };

let objectSorted = {};
 Object.keys(objectExample).sort((key1,key2) => {
    return objectExample[key1].prop2.localeCompare(objectExample[key2].prop2);
}).forEach((element) => {
    objectSorted[element] = objectExample[element];
});

console.log(JSON.stringify(objectSorted));

对不起,我现在没有笔记本电脑。但是下面的代码应该会有所帮助

let objectExample = { key1: { prop1: '123', prop2: 'def' }, key2: { prop1: '456', prop2: 'ghi' }, key3: { prop1: '789', prop2: 'abc' } };

let objectSorted = {};
 Object.keys(objectExample).sort((key1,key2) => {
    return objectExample[key1].prop2.localeCompare(objectExample[key2].prop2);
}).forEach((element) => {
    objectSorted[element] = objectExample[element];
});

console.log(JSON.stringify(objectSorted));

我不会依赖对象键顺序。最合适的方法是使用数组进行排序,因为它们是显式排序的。对于对象键,您可能应该按顺序处理它们。。。我会把它们看作一组


这么说来,对象键最终有一个顺序,即插入顺序,当您使用for..in或使用object.keys对它们进行迭代时会显示出来。设置关键点后,您无法轻松修改其顺序,唯一的选项是删除它,然后再次设置,这将“移动”到最后一个位置。但是再一次,即使有可能做这种事情,我也不会推荐它。。。更不用说对它们进行分类了。使用数组,然后使用数组提供的排序方法。

我不会依赖对象键顺序。最合适的方法是使用数组进行排序,因为它们是显式排序的。对于对象键,您可能应该按顺序处理它们。。。我会把它们看作一组

这么说来,对象键最终有一个顺序,即插入顺序,当您使用for..in或使用object.keys对它们进行迭代时会显示出来。设置关键点后,您无法轻松修改其顺序,唯一的选项是删除它,然后再次设置,这将“移动”到最后一个位置。但是再一次,即使有可能做这种事情,我也不会推荐它。。。更不用说对它们进行分类了。使用数组,然后使用数组提供的排序方法。

除对象排序外,您还可以执行其他操作。例如,输出一个有序列表。
然后这是一个跨浏览器IE9+解决方案
而且不需要任何中间数组

1.  var objectSorted = {}, x, y
2.  var size = Object.keys(objectExample).length; //IE9+
3.  while (size--) {
4.    y = null
5.    for (var key in objectExample) {
6.      var z = objectExample[key].prop2;
7.      if (!objectExample.hasOwnProperty(key)) continue;
8.      if (!y || z < y) {
9.        x = key
10.       y = z;
11.     }
12.   }
13.
14.   objectSorted[x] = objectExample[x];
15.
16.   delete objectExample[x]
17. }
1。var objectSorted={},x,y
2.var size=Object.keys(objectExample).length//IE9+
3.而(大小--){
4.y=null
5.for(objectExample中的var键){
6.var z=objectExample[key].prop2;
7.如果(!objectExample.hasOwnProperty(key))继续;
8.如果(!y | | z
一些描述

2获得。
4
y
将是下一个最低的字符串。忘记删除的一个。
5用一个参数迭代对象。
6将
z
作为要排序的属性。
7跳过所述的最终原型。
8如果发现低于最低值的字符串,则…
9记住找到的最低字符串的键。
10并记住找到的最低字符串。
14用找到的值推送新对象。
16从旧对象中删除键及其值

除对象排序外,您还可以执行其他操作。例如,输出一个有序列表。
然后这是一个跨浏览器IE9+解决方案
而且不需要任何中间数组

1.  var objectSorted = {}, x, y
2.  var size = Object.keys(objectExample).length; //IE9+
3.  while (size--) {
4.    y = null
5.    for (var key in objectExample) {
6.      var z = objectExample[key].prop2;
7.      if (!objectExample.hasOwnProperty(key)) continue;
8.      if (!y || z < y) {
9.        x = key
10.       y = z;
11.     }
12.   }
13.
14.   objectSorted[x] = objectExample[x];
15.
16.   delete objectExample[x]
17. }
1。var objectSorted={},x,y
2.var size=Object.keys(objectExample).length//IE9+
3.而(大小--){
4.y=null
5.for(objectExample中的var键){
6.var z=objectExample[key].prop2;
7.如果(!objectExample.hasOwnProperty(key))继续;
8.如果(!y | | z
一些描述

2获得。
4
y
将是下一个最低的字符串。忘记删除的一个。
5用一个参数迭代对象。
6将
z
作为要排序的属性。
7跳过所述的最终原型。
8如果发现低于最低值的字符串,则…
9记住找到的最低字符串的键。
10并记住找到的最低字符串。
14用找到的值推送新对象。

16从旧对象中删除键及其值

您可以尝试以下方法:使用内置剪切、复制和粘贴功能您可以尝试以下方法:使用内置剪切、复制和粘贴功能可以处理字符串化JSON,但如果您要解析它,则顺序将丢失。请参见示例:如果需要解释,则“关键点”函数将从对象中提取关键点并形成一个数组。然后,根据比较函数,我应用了排序对键数组进行排序。在比较函数中,它获取两个键并进行localeCompare。localeCompare方法比较这些值,并根据您的区域设置进行字典排序。返回-1,0和