排列函数变量范围错误,不会在函数范围之外更新我的结果arr

时间:2019-01-11 22:05:50

标签: javascript permutation

var result = [];
let count = 0;
let permutation = function (arr, ans, M) {
    if (ans.length === M) {
        result.push(ans);
    } 
    for (let i = 0; i < arr.length; i++) {
        ans.push(arr[i]);
        permutation(arr.slice(0,i).concat(arr.slice(i + 1)), ans ,M);
        ans.pop()

    }
}
permutation([1,2,3], [], 3);
return result

当我在if语句中console.log内时,正确的参数ans显示置换数组,但是当我将其推入结果时,它不能正确地推入它。

我希望结果包含所有排列的数组。

1 个答案:

答案 0 :(得分:1)

您需要从数组ans获取副本。如果直接按ans,则使用对象引用,最后该数组为空,如所有结果条目一样。

var result = [];
let count = 0;
let permutation = function (arr, ans, M) {
    if (ans.length === M) {
        result.push(ans.slice());
        //              ^^^^^^^
    } 
    for (let i = 0; i < arr.length; i++) {
        ans.push(arr[i]);
        permutation(arr.slice(0,i).concat(arr.slice(i + 1)), ans ,M);
        ans.pop()

    }
}

permutation([1,2,3], [], 3);

console.log(result.map(a => a.join(' ')));