ошибка области видимости переменной функции перестановки, не будет обновлять мой результат arr за пределами функциональной области [duplicate]

1
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

когда я console.log внутри оператора if, аргумент ans корректный показывает массив перестановок, но когда я подталкиваю его к результату, он не подталкивает его правильно.

Я ожидал, что результат будет содержать весь переставленный массив.

Теги:
permutation

1 ответ

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(' ')));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню