weixin_45628987 2023-01-22 12:19 采纳率: 0%
浏览 28

javascript数组push非空数组,而后console.log显示,push的数组为空数组

我这里有javascript实现时的问题,这里是想用递归的方法找到[1,2]的所有排列,我将probabilitys和probability都用var来声明,但是probabilitys在push操作时并没有达到预期,同时probability却正常工作:


```javascript
/**
 * @param {number} batchSize
 * @param {number[]} groups
 * @return {number}
 */
var currentGroups;
var probabilitys = [];
var probability = [];
function assembly(groups){
    let nextgroups;
    if(groups.length==0){
        // console.log(probability);// [1,2] [2,1]
        probabilitys.push(probability);
        console.log(probabilitys);// 在本地浏览器打开console显示[[]] , [[],[]] ; 在leetcode测试显示[[1,2]] ,
        // [[2,1],[2,1]]
        probability.pop();    
        return;
    }
    for(let item of groups){
        probability.push(item);
        nextgroups = groups;
        nextgroups = nextgroups.filter(it => it!=item);
        assembly(nextgroups)
    }
    probability.pop();
    return;
}

var maxHappyGroups = function(batchSize, groups) {
    currentGroups = groups;
    probabilitys = []//清空上一次的
    assembly(groups)
    // console.log(probabilitys);// [[],[]]
};

```

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-08-26 13:09
    关注

    引用 皆我百晓生 小程序回复内容作答:

    问题出在数组push操作时,对数组的引用进行了添加,而不是添加其副本。这导致在后续修改probability数组时,之前已经push的内容也被修改了。

    为了解决这个问题,可以在push操作时使用数组的slice方法来创建副本。修改代码如下:

    /**
     * @param {number} batchSize
     * @param {number[]} groups
     * @return {number}
     */
    var currentGroups;
    var probabilitys = [];
    var probability = [];
    function assembly(groups){
        let nextGroups;
        if(groups.length==0){
            probabilitys.push(probability.slice()); // 利用slice创建副本
            console.log(probabilitys);
            probability.pop();
            return;
        }
        for(let item of groups){
            probability.push(item);
            nextgroups = groups;
            nextgroups = nextgroups.filter(it => it != item);
            assembly(nextgroups);
        }
        probability.pop();
        return;
    }
     
    var maxHappyGroups = function(batchSize, groups) {
        currentGroups = groups;
        probabilitys = [];
        assembly(groups);
    };
    

    现在,对probability数组进行修改时,不会影响之前已经push到probabilitys中的内容。在console.log输出时,你会看到正确的结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月22日