JavaScript 对数组中的元素进行分组

JavaScript 对数组中的元素进行分组

在给定的问题陈述中,我们被要求使用JavaScript的功能来对数组中的元素进行分组匹配。当我们讨论数组元素分组时,通常使用reduce方法。

reduce()函数在JavaScript中是什么

让我们来了解一下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)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程