JavaScript 按两个属性排序对象数组

JavaScript 按两个属性排序对象数组

给定的问题要求将给定的对象数组按两个属性排序并创建一个javascript程序。

理解问题

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

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

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

第一种方法

步骤1 :在理解逻辑之前,先定义一个带有对象的数组。数组是程序的初始点,所以首先要了解我们将要使用的数组。在我们的第一个程序中,数组的名称将是details,这里定义了name和age作为键和其值。

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

步骤3 :此步骤将通过多个if语句进行判断。在第一行,它将检查名字的前两个值,并且如果第一个值小于第二个值,则返回-1;在第二行,它将检查与第一行完全相反的情况。

步骤4 :此步骤还将进行多个if语句的判断,并对年龄的值进行检查。如果年龄的第一个值小于第二个值,返回-1;否则返回1。

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

示例

//define array
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和difficulty。所以这个数据是自解释的。

步骤2 :这是程序逻辑的第一步。我们在const中定义了一个名为sortedArray的变量。这个函数接受要排序和存储结果数组的数据。然后我们创建了if else语句来根据程序需求检查条件。

示例

// define array named languages with name and difficulty 
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一行方法中可以解决特定问题陈述的数组对象的排序问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程