Javascript/jQuery:如何从数组的项中获取排列

Javascript /jQuery : How to get permutations from items of an array?

本文关键字:获取 排列 数组 jQuery Javascript      更新时间:2023-09-26

如果我有一个包含项目的数组,例如

["To","Ti","Ta"]

我想要一个函数来返回数组中附加项的所有排列,这里的函数将返回:

[["ToTiTa"]["ToTaTi"]["TiToTa"]["TiTaTo"]["TaToTi"]["TaTiTo"]]

你能帮我吗?

您要查找的是排列。您可以使用递归函数创建它们。

下面的代码就是一个示例。permute是前端函数,您的代码应该调用它。permute_rec是构建排列阵列的递归函数,swap只是交换阵列中元素的方便函数:

function swap(array, i, j) {
    if (i != j) {
        var swap = array[i];
        array[i] = array[j];
        array[j] = swap;
    }
}
function permute_rec(res, str, array) {
    if (array.length == 0) {
        res.push(str);
    } else {
        for (var i = 0; i < array.length; i++) {
            swap(array, 0, i);
            permute_rec(res, str + array[0], array.slice(1));
            swap(array, 0, i);
        }
    }
}
function permute(array) {
    var res = [];
    permute_rec(res, "", array);
    return res;
}
console.log(permute(["A", "B", "C"]));

编辑:您可以使用以下代码扩展此代码以包括子阵列的排列:

function xpermute_rec(res, sub, array) {
    if (array.length == 0) {
        if (sub.length > 0) permute_rec(res, "", sub);
    } else {
        xpermute_rec(res, sub, array.slice(1));
        xpermute_rec(res, sub.concat(array[0]), array.slice(1));
    }
}
function xpermute(array) {
    var res = [];
    xpermute_rec(res, [], array);
    return res;
}
console.log(xpermute(["A", "B", "C"]));

此代码创建所有子数组,然后使用原始代码创建排列。(跳过空数组的情况。)