2016-04-15 157 views
1

如何使用Lodash对对象asc和desc进行排序?Lodash - 在对象中排序对象(desc和asc)

例如我想按'r'或'd'对它进行排序。

这是我的目标看起来像:在阵列和使用功能

enter image description here

+0

你的意思是按照排序的顺序将对象放置在不同的键上?如果是这样,你可以简单地通过纯JS来完成。一种方法是将它们移动到一个数组并在那里排序,然后以排序的顺序将其复制回obj ..或者另一种方法是使用对象元素总数的值向主对象添加length属性,然后执行Array。 prototype.sort.call(obj,callback) – Redu

+1

根据JavaScript规范,对象的属性没有顺序。没有“第一”或“最后”属性;他们不能被排序。无论您为它们分配的顺序(或它们在控制台中显示的顺序),在枚举它们时都不保证以任何特定顺序返回它们。如果您需要有序数据结构,请使用数组。 –

回答

1

广场内部对象sortBy()

var users = [ 
{ 'user': 'fred', 'age': 48 }, 
{ 'user': 'barney', 'age': 36 }, 
{ 'user': 'fred', 'age': 40 }, 
{ 'user': 'barney', 'age': 34 } 
]; 

_.sortBy(users, function(o) { return o.user; }); 
// → objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] 
console.log(users.reverse()); // desc order 
+0

我是这样做的。我做了'_.sortBy(sortArray,function(o){return o.d;});它不起作用。对象仍然按照开始时的顺序排序。 – snuuve

+0

@snuuve请显示代码。 – sphinks

0

纯JS也很简单,你可以做这样的事情;

var obj = {a:16, b:2, c:8, d:4, e:1}, 
 
    okeys = Object.keys(obj), 
 
    sorted = {}; 
 
okeys.sort((p,c) => obj[p] <= obj[c]).forEach((p,i) => sorted[okeys[i]] = obj[p]); 
 
document.write('<pre> ' + JSON.stringify(sorted, 0, 2) + '</pre>');

我根据它们的数值排序对象属性。它们的值可以是对象,也可以根据这些对象的属性值进行排序。但是我不能评论什么是做这一切的明智原因。