javascript - 对于 JavaScript 中的堆算法,array.push 产生的结果与 console.log 不同

标签 javascript arrays

我正在尝试使用堆算法为给定字符串创建一个包含所有排列的数组。当我使用 console.log 进行测试时,该函数会打印正确的数组结果。但是,当我尝试将所有数组插入新数组时,它每次都会插入相同的初始数组。

在此示例中,它推送 [a, a, b] 6 次。

首先,为什么要这样做?其次,我如何绕过它并将所有正确的结果推送到我的新数组中。

function permAlone(str) {
//make str into array
var arr = str.split('');
var allArrays = [];
//Heap's Algorithm to make new array with all permutations

var swap = function (array, pos1, pos2) {
    var temp = array[pos1];
    array[pos1] = array[pos2];
    array[pos2] = temp;

};

var permute = function(array, n) {
    n = n || array.length;
    if (n === 1 ) {
        console.log(array);
        //allArrays.push(array);
    }
    else {
        for (var i=1; i <= n; i += 1) {
            permute(array, n-1);
            if (n%2) {
                var j=1;
            }
            else {
                j=i;
            }
            swap(array, j-1, n-1);
        }
    }

};
permute(arr);
//console.log(allArrays);
}

permAlone('aab');

最佳答案

您只有一个数组(不包括 allArrays),因此您已将同一个数组插入 allArrays 六次。

在推送数组之前,您应该复制该数组。您可以使用 slice 来做到这一点:

allArrays.push(array.slice(0));

关于javascript - 对于 JavaScript 中的堆算法,array.push 产生的结果与 console.log 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496835/

相关文章:

javascript - 当我尝试测试本地 Meteor 包时出错

javascript - Service Worker 在获取 MP3 音频时抛出错误

JavaScript 代码在某些浏览器上无法运行

javascript - 设置文档中每个 anchor 的属性

php - 合并多个关联数组并使用默认值添加缺失的列

javascript - jQuery:将 tr 添加到表 tbody 会阻止 tr 单击功能

java - 在 Java 中拆分字符串?

arrays - 简单的数学函数 Swift

java - 如何构建并返回包含数组中元素的字符串?

arrays - 在具有大量输入值的数组中查找