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

更新于:2023年8月23日

259 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.