当前位置: 首页 > 知识库问答 >
问题:

基于嵌套键值对对象数组排序的最快方法

穆文斌
2023-03-14

我试图对包含大约100个大型实体(几乎有30个键)的对象数组进行排序,其基础是key的值,这些值深深嵌套在一个对象中,为此我使用了Lodash的orderBy方法:

let name = (user) => user.accountDetails.name.toLowerCase();
let dob = (user) => new Date(user.personalProfile.dob);    
orderBy(cloneDeep(data), [name, dob], [sortOrder1, sortOrder2, sortOrder3])

*考虑sortOrder为desc或asec

但排序过程所花费的时间相当长。我们可以使用哪种更好的方法来将键深埋在对象中对对象数组进行排序?

示例数据(考虑这样的50个条目至少有40个键)

{
    "list": "bugs42",
    "start-date": "2015-08-27",
    "accountDetails": {
        "name": "diamond",
        "text": "8 months",
        "milliseconds": 19936427304
    }
    "personalProfile": {
        "name": "stark",
        "dob": "2003-03-12T09:26:39.980Z",
    }
},
{
    
    "list": "bugs50",
    "start-date": "2015-08-27",
    "accountDetails": {
        "name": "ruby",
        "text": "8 months",
        "milliseconds": 19936427305
    }
    "personalProfile": {
        "name": "warmachine",
        "dob": "2007-03-31T09:26:39.980Z",
    }
}

共有1个答案

微生令
2023-03-14

我们可以使用JavaScript内置的数组sort()方法,该方法将对所有这些进行快速、良好的排序:

null

const data = [{
  list: "bugs42",
  startdate: "2015-08-27",
  accountDetails: { name: "diamond", text: "8 months", milliseconds: 19936427304 },
  personalProfile: { name: "stark", dob: "2003-03-12T09:26:39.980Z" }
}, {
  list: "bugs50",
  startdate: "2015-08-27",
  accountDetails: { name: "ruby", text: "8 months", milliseconds: 19936427305 },
  personalProfile: { name: "warmachine", dob: "2007-03-31T09:26:39.980Z" }
}];

const sortByDobAsc = data => [...data].sort((a,b) => new Date(a.personalProfile.dob) - new Date(b.personalProfile.dob));

const sortByDobDes = data => [...data].sort((a,b) => new Date(b.personalProfile.dob) - new Date(a.personalProfile.dob));

console.log(sortByDobAsc(data), sortByDobDes(data));
 类似资料:
  • 问题内容: 我正在尝试基于一些嵌套对象来过滤数组。 输入数组如下所示: 我希望这种情况的输出如下所示: 我正在使用此公式来做到这一点: 输出几乎是好的,但它返回的对象带有所有带有姓氏的对象(最好检查一下小提琴:D),而不是将其删除。我如何改善过滤? 问题答案: 调用之后,您需要将结果通过管道传递到,如下所示: 我在这里假设您不想操纵原始数组。因此,我正在使用Object.assign。

  • 本文向大家介绍JS sort方法基于数组对象属性值排序,包括了JS sort方法基于数组对象属性值排序的使用技巧和注意事项,需要的朋友参考一下 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. 如何根据参数不同,来确定是升序排列,还是降序排序呢? 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍基于python list对象中嵌套元组使用sort时的排序方法,包括了基于python list对象中嵌套元组使用sort时的排序方法的使用技巧和注意事项,需要的朋友参考一下 在list中嵌套元组,在进行sort排序的时候,产生的是原数组的副本,排序过程中,先根据第一个字段进行从小到大排序,如果第一个字段相同的话,再根据第二个字段进行排序,依次类推,当涉及到字母的时候,是按照字典序

  • 问题内容: 我正在寻找一种基于布尔值对Swift数组进行排序的方法。 我已经使用强制转换为NSArray来工作了: 但是我在寻找Swift变体,有什么想法吗? 更新 感谢Arkku,我设法使用以下代码修复了此问题: 问题答案: 斯威夫特的阵列可以在适当的位置进行排序或用新的阵列。这两个函数的单个参数都是一个闭合,该闭合带有两个元素,如果第一个元素在第二个元素之前被排序,则返回。使用闭包的参数的最短

  • 问题内容: 我需要通过对象属性之一的一个属性比较对象数组。 我在做 : 它没有编译,有人知道怎么做吗? 谢谢。 问题答案: 这是代码中导致错误的部分 您可以创建对特定类型的任意对象的(静态或非静态)方法的引用。对任何类型的对象的方法的引用如下所示: 但是方法引用不是对象,并且没有成员可以访问。使用此代码,您尝试访问引用的成员变量(并且不能) 另外,方法引用不是类,因此您不能从它们中获取另一个方法引

  • 例如,我有以下数据集: 我需要根据数组中的条件对数组进行排序。我最终得出了这样的解决方案: 但我无法理解如何使用数组而不是硬编码的和属性。数组可以有许多属性。