【问题标题】:Lodash - sort objects in object ( desc and asc)Lodash - 对对象中的对象进行排序( desc 和 asc )
【发布时间】:2016-04-15 10:22:20
【问题描述】:

如何使用 Lodash 对对象的对象进行 asc 和 desc 排序?

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

这是我的对象的样子:

【问题讨论】:

  • 您的意思是按排序顺序将对象放置到不同的键上..?如果是这样,您可以简单地通过纯 JS 来做到这一点。一种方法是将它们移动到一个数组并在那里排序,然后按排序顺序复制回 obj.. 或者另一种方法是将长度属性添加到您的主对象,其值为对象元素的总数,然后执行 Array. prototype.sort.call(obj,callback)
  • 根据 JavaScript 规范,对象的属性没有顺序。没有“第一个”或“最后一个”属性;它们无法排序。无论您分配它们的顺序(或它们在控制台中出现的顺序)如何,都不能保证在枚举它们时以任何特定顺序将它们取回。如果您需要有序的数据结构,请使用数组。

标签: javascript arrays html object lodash


【解决方案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

【讨论】:

  • 我是这样做的。我做了`_.sortBy(sortArray, function(o){return od;});它不起作用。对象仍按开始时的顺序排序。
【解决方案2】:

纯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>');

我正在根据它们的数值对对象属性进行排序。它们的值可以是对象,您也可以根据这些对象的属性值进行排序。但我无法评论这一切背后的合理原因。

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多