在 JavaScript 中按两个属性对对象数组进行排序

javascriptweb developmentfront end technologyobject oriented programming更新于 2024/12/20 5:00:17

给定的问题是按两个属性对给定的对象数组进行排序,并在 JavaScript 中创建一个程序。

理解问题

让我们深入了解问题陈述。您将获得一个具有键和值的对象数组。根据问题陈述,我们需要该数组的排序形式。为了实现这个问题,我们将首先对数组的第一列进行排序,然后对数组的第二列进行排序。然后再次将其排列成排序形式。

正如我们所知,数组是计算机科学中的基本数据结构。数组也可以是对象的集合,这些对象可以是键值对。其中的键将定义数组中值的类型。因此,借助键,我们可以访问它并执行排序操作。

在我们的项目中,我们将使用两种方法解决问题。

算法 - 第一种方法

步骤 1:在理解逻辑之前,首先定义一个包含对象的数组。数组是程序的起点,因此首先了解我们将要使用的数组。在我们的第一个程序中,数组的名称将是详细信息,这里将名称和年龄定义为键及其值。

步骤 2:此步骤将对定义的数组执行排序操作。在此步骤中,排序后的数据将传递给 afterSorting 变量。在最后一步中,我们将 afterSorting 打印结果。

步骤 3:此步骤将经历多个 if 语句。在第一行中,它将检查名称的前两个值,如果第一个值小于第二个值,则返回 -1,在第二行中,它将检查与第一行完全相反的内容。

步骤 4:此步骤还将执行多个 if 语句并检查 age 的值。如果 age 的第一个值小于第二个值,则返回 -1,否则返回 1。

步骤 5:此步骤将返回已更新和已排序的对象数组的值。

示例

//定义数组
const details = [
  { name: 'Preeti', age: 25 },
  { name: 'Aman', age: 30 },
  { name: 'Shekhar', age: 20 },
  { name: 'Preeti', age: 25 },
  { name: 'Aman', age: 25 },
  { name: 'Anjali', age: 22 },
  { name: 'Kajal', age: 28 },
  { name: 'Anjali', age: 22 },
  { name: 'Shekhar', age: 20 },
];

const afterSorting = details.sort((first, second) => {
  if (first.name < second.name) return -1;
  if (first.name > second.name) return 1;
   if (first.age < second.age) return -1;
  if (first.age > second.age) return 1;
  return 0;
});

console.log(afterSorting);

输出

[
  { name: 'Aman', age: 25 },
  { name: 'Aman', age: 30 },
  { name: 'Anjali', age: 22 },
  { name: 'Anjali', age: 22 },
  { name: 'Kajal', age: 28 },
  { name: 'Preeti', age: 25 },
  { name: 'Preeti', age: 25 },
  { name: 'Shekhar', age: 20 },
  { name: 'Shekhar', age: 20 }
]

算法 - 第二种方法

此方法在编码和语法方面与上述方法略有不同。

步骤 1:在初始步骤中,我们需要定义一个数组。在我们的例子中,我们有一个数组名为 languages,其中定义了两个属性:name 和 diff。所以这些数据是不言自明的。

步骤 2:这是此程序中逻辑的第一步。我们在 const 中定义了一个名为 sortedArray 的变量。此函数获取数据以进行排序并将结果数组存储在其中。然后,我们创建了 if else 语句来根据程序的要求检查条件。

示例

// 定义名为 languages 的数组,其中包含 name 和 diff
const languages = [
   {name: "Python", difficulty: "Easy"},
   {name: "Java", difficulty: "Tough"},
   {name: "Javascript", difficulty: "Medium"},
   {name: "Javascript", difficulty: "Average"},
   {name: "Python", difficulty: "moderate"},
   {name: "HTML", difficulty: "Easy"},
   {name: "CSS", difficulty: "Medium"},
   {name: "HTML", difficulty: "Effortless"}];

const sortedArray = languages.sort((a, b)=> {
  if (a.name === b.name){
   return a.difficulty < b.difficulty ? -1 : 1
  } else {
   return a.name < b.name ? -1 : 1
  }
})

console.log("Array of objects after sorting");
console.log(sortedArray);

输出

Sort Array of objects by two properties
[
  { name: 'CSS', difficulty: 'Medium' },
  { name: 'HTML', difficulty: 'Easy' },
  { name: 'HTML', difficulty: 'Effortless' },
  { name: 'Java', difficulty: 'Tough' },
  { name: 'Javascript', difficulty: 'Average' },
  { name: 'Javascript', difficulty: 'Medium' },
  { name: 'Python', difficulty: 'Easy' },
  { name: 'Python', difficulty: 'moderate' }
]

复杂性

在上述算法中,我们最初使用 Javascript 的排序方法,该方法需要 O(n) 的时间来对长度为 n 的对象进行排序,然后使用 if 条件,该方法再次需要对象长度的时间来对对象进行排序。因此,在将两者相加之后:O(n) + O(n) = O(2n)。在 O(2n) 中,2 是常数,而在复杂性中常数无关紧要,因此结果将是 O(n) 时间。所采用的空间复杂度为 O(n)。

结论

这就是我们解决给定问题的方法,逻辑思维是获得解决任何问题的关键。在编码上下文中,从简单的排序 javascript 一行方法开始,针对特定问题陈述对对象数组进行排序。


相关文章


有用资源