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)。