在 JavaScript 中对数组中的匹配元素进行分组

javascriptweb developmentfront end technologyobject oriented programming

在给定的问题陈述中,我们被要求借助 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 变量显示输出。

示例 

// 定义包含一些重复项的数组
const array = ['A','A','A','A','D','E','E','F','H','H','H','L','M','S','S','U','Y','Y'];

    // 创建新数组来分组
    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.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)。


相关文章