我有一个这样的对象:
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 6年前我也看到过这个问题。
答案 0 :(得分:0)
无法对对象属性进行排序,它们没有索引顺序。如果要保持元素的特定顺序,则必须使用数组,而不是对象。这是一个例子,如何按字母顺序对数组进行排序:
let arrExample = [
{ prop1: '123', prop2: 'def' },
{ prop1: '456', prop2: 'ghi' },
{ prop1: '789', prop2: 'abc' }
];
arrExample.sort(function(a, b){
if(a.prop2 < b.prop2) return -1;
if(a.prop2 > b.prop2) return 1;
return 0;
})
console.log(arrExample);
答案 1 :(得分:0)
抱歉,现在没有笔记本电脑。但是下面的代码应该有所帮助。
The vectorize function is provided primarily for convenience, not for performance. The implementation is essentially a for loop.
答案 2 :(得分:0)
我不会依赖对象键顺序。最合适的是使用数组进行排序,因为它们是明确排序的。对于对象键,您应该将它们视为有序...我会将它们视为一组。
这样说,对象键最后有一个顺序,即插入顺序,就像用for..in或使用Object.keys迭代它们时所示。在设置密钥后,您无法轻松修改密钥的顺序,唯一的选择是删除密钥,然后再次设置密钥,这样就可以&#34;移动&#34;它进入了最后的位置。但是,即使有可能做这种事情,我根本不会推荐它......甚至更少尝试对它们进行排序。使用数组,然后使用数组提供的排序方法。
答案 3 :(得分:0)
Property order is predictable in JavaScript objects since ES2015
除了对象排序外,您还可以执行其他操作。例如输出一个有序列表。
然后这是跨浏览器的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. }
一些说明
2获得length of object。
4 y
将是找到的下一个最低字符串。忘记删除的了。
5使用for-in迭代对象。
6假设z
是要排序的属性。
7根据here跳过最终的原型。
8如果找到的字符串比最低的字符串小,则...
9记住找到的最低字符串的键。
10并记住找到的最低的字符串。
14推入具有找到值的新对象。
16从旧对象中删除键及其值。