JavaScript 对数组进行排序,并将所有相同(重复)的数字分组到它们各自的子数组中

JavaScript 对数组进行排序,并将所有相同(重复)的数字分组到它们各自的子数组中

在这个问题中,我们需要通过创建子数组来将数组中所有重复的数据分组。在创建子数组后,我们需要按照排序顺序进行排列。这个问题可以通过数据结构的搜索技术来解决。

理解问题

为了解决这个问题,我们将使用JavaScript的reduce()方法的两种方式。reduce方法是一种迭代方法,它使用一个reducer函数来迭代数组中的所有项。

通过逐个检查,我们将跟踪所有元素并将其保存在一个单独的变量中,在遍历数组中的所有元素后进行分组。

第一种方法

步骤1: 在这一步中定义所有必要的变量。在我们的示例中,我们创建了一个名为’arrayData’的数组。

步骤2: 现在,为了迭代数组的所有项,我们将使用JavaScript的reduce函数,并使用两个指针来获取每个项的位置。这些指针被命名为prevItem和currentItem。如果prevItem和currentItem相等,则将它们添加到子数组中,否则添加到新数组中。

步骤3: 现在将所有值以对象形式放入,并将新创建的数组赋值给sameObjToArray变量。

步骤4: 在分组所有重复元素后,返回结果并使用控制台显示输出。

示例

//Define array of duplicate elements in it
const arrayData = [2,3,8,9,2,3,5,4,8,9,2,3,7,5];

//define a variable to check same items
const sameObj = arrayData.reduce(
   (prevItem, currentItem) => ({
     ...prevItem,
     [currentItem]: [...(prevItem[currentItem] || []), currentItem],
   }),
   {}
  );

const sameObjToArray = Object.values(sameObj);

// console the output
console.log("After grouping identical elements");
console.log(sameObjToArray);

输出

After grouping identical elements
[ [ 2, 2, 2 ], [ 3, 3, 3 ], [ 4 ], [ 5, 5 ], [ 7 ], [ 8, 8 ], [ 9, 9 ] ]

第二种方法

步骤1 :在给定的问题中,我们将检查数组中的重复元素,并将它们组成一个单独的数组。为了实现这个问题,我们将遵循一些指导方针。首先,我们将创建一个函数来检查相同的元素,并将一个数组作为参数传递进去。

步骤2 :如果提供的数组尚未排序,我们必须首先使用sort()方法对其进行排序。我们在这一步中以升序对提供的数组进行排序。排序完成后,进行分组将变得简单,然后您可以将项目放入新的数组中。

步骤3 :正如在之前的步骤中所说,数组现在已经排序。为了构建子数组,我们需要一个空数组来存储原数组的组件,并给它取一个名字。

步骤4 :在步骤1、2和3之后,迭代输入数组的所有元素,因此我们将使用数组的长度初始化一个for循环。

步骤5 :在for循环中,检查元素的值是否相同,如果相同,则将其推入相同的子数组中。否则将其推入新的子数组中。

步骤6 :在这一步中,声明要传递给上述函数的输入数组数据。

步骤7 :在最后一步中,定义另一个变量来调用上述函数,并将一个已声明的数组作为参数传递给它。为了打印结果,控制台输出。

示例

// define a function to check duplicate numbers
function groupDuplicateNumbers(array) {
  array.sort((a, b) => a - b); 

  // declare empty array
  const result = [[]]; 

 // initialize a for loop to iterate all the elements
  for (let i = 0; i < array.length; i++) {
   // if-else condition to check elements are same
   if (array[i] === array[i-1]) {
     result[result.length - 1].push(array[i]); 
   } else {
     result.push([array[i]]); 
   }
  }

  return result.slice(1); 
}

//define array and call function
const array =  [151,221,330,151,221,330,414,202,202,414];
const finalGroup = groupDuplicateNumbers(array); 
console.log("The group of identical items in array:")
console.log(finalGroup);

输出

The group of identical items in array:
[
  [ 151, 151 ],
  [ 202, 202 ],
  [ 221, 221 ],
  [ 330, 330 ],
  [ 414, 414 ]
]

复杂性

计算复杂性时,我们需要检查数组大小和函数。因此,在我们的程序中,我们使用了一个大小为n的数组,并且有一个sameObj函数,它遍历所有的元素并检查它们的出现次数。在检查重复项之后,我们将它放入子数组中,以创建一个新数组的子数组组合。因此,基本上完成该程序的执行所花费的时间是O(n),因为数组有n个元素。

结论

所以,在解决这个问题之后,我们学会了如何移除或分离数组中的重复元素。这种方法可以减少数据冗余,并减少保存数据的内存空间。最后,我们得出结论,该算法的时间复杂度是O(n)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程