JavaScript 中根据两个属性对对象数组进行排序
给定问题要求根据两个属性对给定的对象数组进行排序,并用 JavaScript 创建一个程序。
理解问题
让我们深入了解一下问题陈述。您将获得一个包含键值对的对象数组。根据问题陈述,我们需要该数组的排序形式。为了实现此问题,我们将首先对数组的第一列进行排序,然后对数组的第二列进行排序。然后再次将其排列成排序形式。
正如我们所知,数组是计算机科学中的基本数据结构。数组也可以是对象的集合,这些对象可以是键值对。其中键将定义数组中值的类型。因此,借助键,我们可以访问它并执行排序操作。
在我们的项目中,我们将用两种方法解决这个问题。
算法 - 第一种方法
步骤 1:在理解逻辑之前,首先定义一个包含对象的数组。数组是程序的初始点,因此首先了解我们将要使用的数组。在我们的第一个程序中,数组的名称将为 details,此处 name 和 age 被定义为键及其值。
步骤 2:此步骤将对定义的数组执行排序操作。在此步骤中,排序后的数据将传递给 afterSorting 变量。在最后一步,我们将使用 afterSorting 打印结果。
步骤 3:此步骤将遍历多个 if 语句。在第一行,它将检查 name 的前两个值,如果第一个值小于第二个值,则返回 -1,在第二行,它将检查与第一行完全相反的内容。
步骤 4:此步骤也将执行多个 if 语句并检查 age 的值。如果 age 的第一个值小于第二个值,则返回 -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 的 sort 方法,该方法需要 O(n) 时间来对长度为 n 的对象进行排序,然后是 if 条件,这些条件又需要最多对象长度的时间来对对象进行排序。因此,在将两者相加后:O(n) + O(n) = O(2n)。在 O(2n) 中,2 是常数,在复杂度中,常数无关紧要,因此结果将为 O(n) 时间。占用的空间复杂度为 O(n)。
结论
这就是我们如何解决给定问题的方法,逻辑思维是获得解决任何问题思路的关键。在编码的背景下,从针对特定问题陈述(对对象数组进行排序)的简单的 javascript 一行排序方法开始。