JavaScript数组中分组匹配元素
给定的问题陈述要求我们利用JavaScript功能在数组中进行分组匹配元素。当我们谈到对数组元素进行分组时,通常使用reduce方法。
JavaScript中的reduce()函数是什么?
让我们了解一下JavaScript中reduce函数的工作原理。
在JavaScript中,内置方法reduce()用于迭代数组的所有元素。此方法根据数组的每个元素累积一个项目,它基本上接受两个参数。第一个参数是累加器,第二个值是当前值。reduce函数针对数组的每个元素调用,并给出累加器的新的值。
以下是JavaScript中定义reduce的语法:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
console.log(sum);
输出
15
理解逻辑
代码接收输入数组arr,并将所有相同的项分组到一起。然后,它将返回一个数组数组,其中每个内部数组都保留数组中所有重复元素的索引。
算法
步骤1:首先,我们将创建一个包含一些重复值的数组。
步骤2:现在,我们将对创建的数组使用reduce函数来对元素进行分组。
步骤3:在第二步之后,在reducer函数中,我们将检查数组中的最后一项是否与当前元素相同。
步骤4:接下来,此步骤将识别如果最后一项与当前元素不相同,并将一个新的子数组添加到子数组数组中。
步骤5:检查上述条件后,将当前项推入子数组数组中的最后一个子数组。
步骤6:现在显示更新后的对象及其子数组。
步骤7:现在访问reducer函数返回的对象中的子数组,然后将其赋值给变量groupedArray。
步骤8:使用groupedArray变量显示输出。
示例
// define array of containing some repeated items
const array = ['A','A','A','A','D','E','E','F','H','H','H','L','M','S','S','U','Y','Y'];
// create new array to make groups
const groupedArray = array.reduce((item, index) =>{
if (typeof item.last === 'undefined' || item.last !== index) {
item.last = index;
item.array.push([]);
}
item.array[item.array.length - 1].push(index);
return item;
}, {array: []}).array;
//console the output
console.log(groupedArray);
输出
[
[ 'A', 'A', 'A', 'A' ],
[ 'D' ],
[ 'E', 'E' ],
[ 'F' ],
[ 'H', 'H', 'H' ],
[ 'L' ],
[ 'M' ],
[ 'S', 'S' ],
[ 'U' ],
[ 'Y', 'Y' ]
]
上面给出的代码是在阅读问题陈述时想到的最直接的方法,但是如果您掌握了其背后的理论,您可以简化并调整它,以最有效地利用时间和空间。
在上面的代码中,我们声明了一个reduce函数,它接收累加器和当前元素作为输入。然后我们一步一步地进行,首先检查if语句并将结果推送到gourpedArray。最后,我们得到了子数组的结果数组。
在代码中,groupedArray对象用于存储给定数组['A','A','A','A','D','E','E','F','H','H','H','L','M','S','S','U','Y','Y']的结果子数组。该函数将输出作为数组的相似元素的子数组返回。
时间复杂度
时间复杂度:上述代码只执行一次,它在O(n)时间内迭代数组的所有元素。然后,reducer函数的内循环每次迭代的复杂度为O(1)。这是因为我们正在分组项目,而没有执行任何其他任务。因此,这段代码的总体时间复杂度将为O(n)。
空间复杂度:为了存储子数组,需要一个新数组,因为我们只存储对输入元素的指针。因此,子数组的大小将取决于给定的输入数据。空间复杂度将为O(n)。
结论
这就是我们获得上述问题陈述最终结果的方法。这是在JavaScript中对包含重复项的数组进行分组重复元素的最简单可靠的方法。它使用reduce方法迭代输入数组并创建匹配元素的子数组。时间复杂度和空间复杂度都将为O(n)。
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP