首页 > 解决方案 > 将数组添加到数组数组

问题描述

我确信这非常简单,我真的不想要一个完整的解决方案,而是在我学习的过程中指出正确的方向。

我有:

let randomArray = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];

目标是让它看起来像这样,对项目进行分组:

[[1,1,1,1],[2,2,2],[10],[20,20],[391],[392],[591]]

我的以下代码安排好了,并且分组很好。我将温度推送到我的 Group 数组。但是当我重置我的“tempArray”以使其为下一个“组”准备好时,它也会从我的组中删除数据。因为有关联?我假设?也许?

最后剩下的只有最后一项。

我该如何阻止它这样做?

    // My SOlution
let randomArray = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
let tempArray = [];
let groupArray = [];

function cleanTheRoom (arr) {
    let ascendingArray = arr.sort(function(a,b) {
        return a - b;
    });
    tempArray.push(randomArray[0])
    for (let i = 1; i <= randomArray.length; i++) {
        if (randomArray[i] === tempArray[0]) {
            tempArray.push(randomArray[i])
        } else {
            groupArray.push(tempArray);
            tempArray = []
            tempArray.push(randomArray[i])
        }
    } console.log(groupArray)
}

cleanTheRoom(randomArray);

标签: javascriptarraysgrouping

解决方案


我拿走了你的代码并改变了一些部分。

  • Array#sort排序到位。无需分配给新变量。

  • 通过使用索引减一和索引处的值,从零开始迭代并直接查看数据。如果不相等,则找到一个新组。在这种情况下,只需分配一个空数组groupArray并将组推送到结果。

    这种方法不是使用相同的对象引用,而是通过将零分配给 来清空数组,而是length采用一个新数组。

  • 将值推到if语句之外,因为它在thenelse部分加倍。

  • 最后返回包含组的数组。

function cleanTheRoom(array) {
    let result = [];
    let groupArray;

    array.sort(function(a, b) {
        return a - b;
    });

    for (let i = 0; i < array.length; i++) {
        if (array[i - 1] !== array[i]) {
            groupArray = [];
            result.push(groupArray);
        }
        groupArray.push(array[i]);
    }

    return result;
}

let randomArray = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];

console.log(cleanTheRoom(randomArray));


推荐阅读